Mixins,多继承,构造函数和数据

时间:2011-06-09 14:55:55

标签: python multiple-inheritance mixins

我有一个班级:

class A(object):
    def __init__(self, *args):
        # impl

也是一个“mixin”,基本上是另一个带有一些数据和方法的类:

class Mixin(object):
    def __init__(self):
        self.data = []

    def a_method(self):
        # do something

现在我用mixin创建一个A的子类:

class AWithMixin(A, Mixin):
    pass

我的问题是我想要调用A和Mixin的构造函数。我考虑给AWithMixin一个自己的构造函数,其中调用了super,但是超类的构造函数有不同的参数列表。什么是最佳分辨率?

2 个答案:

答案 0 :(得分:10)

class A_1(object):
    def __init__(self, *args, **kwargs):
        print 'A_1 constructor'
        super(A_1, self).__init__(*args, **kwargs)

class A_2(object):
    def __init__(self, *args, **kwargs):
        print 'A_2 constructor'
        super(A_2, self).__init__(*args, **kwargs)

class B(A_1, A_2):
    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
        print 'B constructor'

def main():
    b = B()
    return 0

if __name__ == '__main__':
    main()
  1. A_1构造函数
  2. A_2构造函数
  3. B构造函数

答案 1 :(得分:9)

我对OOP也很新,但这段代码有什么问题:

class AWithMixin(A, Mixin):
    def __init__(self, *args):
        A.__init__(self, *args)
        Mixin.__init__(self)