关于python:Mixins,多继承,构造函数和数据

Mixins, multi-inheritance, constructors, and data

我有一门课:

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

还有一个"mixin",基本上是另一个包含一些数据和方法的类:

1
2
3
4
5
6
class Mixin(object):
    def __init__(self):
        self.data = []

    def a_method(self):
        # do something

现在我用mixin创建了a的子类:

1
2
class AWithMixin(A, Mixin):
    pass

我的问题是需要同时调用和mixin的构造函数。我考虑给awithMixin一个自己的构造函数,在其中调用了super,但是super类的构造函数有不同的参数列表。最好的解决方案是什么?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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()

  • 一级建造师
  • 二级建造师
  • B施工人员

  • 我对OOP也很陌生,但是这个代码有什么问题:

    1
    2
    3
    4
    class AWithMixin(A, Mixin):
        def __init__(self, *args):
            A.__init__(self, *args)
            Mixin.__init__(self)