假设我有一个基类(MyBase),它有一个__init__
方法
我也有2个mixins。这些mixin中的每一个都有一个属性和几个方法,但是这两个方法或属性在两个mixin中都不常见。
MyBaseClass,mixin1和mixin2都继承自对象
我想从mixins(mixin1和mixin2)和MyBase派生一个类(MyRealClass)。
从我在MRO上看到的,MyRealClass的正确定义是
class MyRealClass(mixin1, mixin2, MyBase):
MyRealClass有一个do_init方法(我想控制何时初始化类的某些部分,但MyBase有一个__init__
方法。
我的问题是,在mixins中,我应该使用__init__
方法吗?
你能解释他们为什么要这样做吗?对于我的班级,我不需要在init中为mixin做任何工作。
由于
答案 0 :(得分:1)
嗯,__init__
对象在创建时会自动调用MyRealClass
。然后,根据MRO处理函数调用:首先,如果MyRealClass
定义__init__
,它将被调用,否则解释器将在父类中搜索__init__
:{{1 }},Mixin1
,最后是Mixin2
。这意味着MyBase
不需要任何MyRealClass
方法。
如果您选择在某个时候实施__init__
,请务必致电MyRealClass.__init__
,否则您将隐藏super(MyRealClass, self).__init__()
构造函数。
答案 1 :(得分:0)
没有。如果你没有做任何事情,那就没有必要重写一个方法。让它自动继承超类方法。