2

假设我有一个基类(MyBase),它有一个__init__方法

我也有2个mixin。这些 mixin 中的每一个都有一个属性和几个方法,但是在这两个 mixin 中没有一个方法或属性是通用的。

MyBaseClass、mixin1 和 mixin2 都继承自 object

我想从 mixin(mixin1 和 mixin2)和 MyBase 派生一个类(MyRealClass)。

根据我在 MRO 上看到的,MyRealClass 的正确定义是

class MyRealClass(mixin1, mixin2, MyBase):

MyRealClass 有一个 do_init 方法(我想控制何时初始化类的某些部分,但 MyBase 有一个__init__方法。

我的问题是,在 mixins 中,我应该有一个__init__方法吗?

你能解释他们为什么应该这样做吗?我不需要在 init 中为我的班级的任何一个 mixin 做任何工作。

谢谢

4

2 回答 2

2

好吧,创建对象时__init__会自动调用MyRealClass它们。然后,函数调用按照 MRO 处理:首先,如果MyRealClass定义了__init__,就会调用,否则解释器会__init__在父类中搜索:Mixin1, Mixin2, 最后在MyBase. 这意味着MyRealClass不需要任何__init__方法。

如果您选择MyRealClass.__init__在某个时候实现,请确保调用super(MyRealClass, self).__init__(),否则您将隐藏MyBase构造函数。

于 2013-10-20T11:10:29.373 回答
0

不,如果你没有在其中做任何事情,那么重写一个方法是没有意义的。只要让它自动继承超类方法。

于 2013-10-20T11:04:49.763 回答