【问题标题】:multiple mixins and __init__ methods多个 mixins 和 __init__ 方法
【发布时间】:2013-10-28 21:14:14
【问题描述】:

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

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

MyBaseClass、mixin1 和 mixin2 都继承自对象

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

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

class MyRealClass(mixin1, mixin2, MyBase):

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

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

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

谢谢

【问题讨论】:

    标签: python python-2.7 multiple-inheritance mixins


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 2018-01-28
        • 2020-10-18
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多