gpt4 book ai didi

python - 防止类在 Python 中直接实例化

转载 作者:IT老高 更新时间:2023-10-28 22:19:43 27 4
gpt4 key购买 nike

我有一个父类(super class),其方法调用仅在其子类中定义的其他方法。这就是为什么当我创建我的父类(super class)的一个实例并调用它的方法时,它找不到该方法并引发错误。

这是一个例子:

class SuperClass(object):

def method_one(self):
value = self.subclass_method()
print value


class SubClassOne(SuperClass):

def subclass_method(self):
return 'subclass 1'


class SubClassTwo(SuperClass):

def subclass_method(self):
return 'nubclass 2'


s1 = SubClassOne()
s1.method_one()

s2 = SubClassTwo()
s2.method_one()

c = SuperClass()
c.method_one()

# Results:
# subclass 1
# nubclass 2
# Traceback (most recent call last):
# File "abst.py", line 28, in <module>
# c.method_one()
# File "abst.py", line 4, in method_one
# value = self.subclass_method()
# AttributeError: 'SuperClass' object has no attribute 'subclass_method'

我正在考虑在创建新实例时更改父类(super class)的 init 并验证对象的类型。如果对象属于父类(super class),则会引发错误。但是,我不太确定这是否是 Pythonic 的方式。

有什么建议吗?

最佳答案

我会覆盖基类中的 __new__(),如果它是基类,则根本无法实例化。

class BaseClass:    # Py3

def __new__(cls, *args, **kwargs):
if cls is BaseClass:
raise TypeError(f"only children of '{cls.__name__}' may be instantiated")
return object.__new__(cls, *args, **kwargs)

这比在 __init__() 中更好地分离关注点,并且“快速失败”。

关于python - 防止类在 Python 中直接实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com