多个mixins和__init__方法

时间:2013-10-20 10:57:00

标签: python python-2.7 multiple-inheritance mixins

假设我有一个基类(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做任何工作。

由于

2 个答案:

答案 0 :(得分:1)

嗯,__init__对象在创建时会自动调用MyRealClass。然后,根据MRO处理函数调用:首先,如果MyRealClass定义__init__,它将被调用,否则解释器将在父类中搜索__init__:{{1 }},Mixin1,最后是Mixin2。这意味着MyBase不需要任何MyRealClass方法。

如果您选择在某个时候实施__init__,请务必致电MyRealClass.__init__,否则您将隐藏super(MyRealClass, self).__init__()构造函数。

答案 1 :(得分:0)

没有。如果你没有做任何事情,那就没有必要重写一个方法。让它自动继承超类方法。