我有一个名为CacheObject的类,并且有很多类从它延伸。如何使子类自动调用父类__init__?
现在我需要从这个类中添加的所有类的共同的东西,所以我写这篇
class CacheObject(object):
def __init__(self):
self.updatedict = dict()
但子类没有获得updatedict attribute.i知道调用超级初始化函数是蟒蛇可选,但是有没有一种简单的方法可以强制所有人添加init,而不是遍历所有类并逐个修改它们?如果您想将装饰自动添加到所有子类,使用元类
def my_decorator(cls):
old_init = cls.__init__
def new_init(self):
self.updatedict = dict()
old_init(self)
cls.__init__ = new_init
return cls
@my_decorator
class SubClass(CacheObject):
pass
:
class myMeta(type):
def __new__(cls, name, parents, dct):
return my_decorator(super().__new__(cls, name, parents, dct))
class CacheObject(object, metaclass=myMeta):
pass
您是否正在寻找一种解决方案,该解决方案应该能够与多重继承协同工作?如果是这样,无论如何你必须调用'super'。如果子类没有定义自己的'__init__',则会自动调用基类的'__init__'。否则,它们必须包含对“super().__ init__”的调用。 – shx2
“我知道在python中调用超级初始化函数是可选的” - 如果您希望基类可以自由运行初始化代码,则不是。 –
如果我反向控制该子类仍然需要修改。所有子类__init__必须重命名。 – user2003548