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() |
号
我对OOP也很陌生,但是这个代码有什么问题:
1 2 3 4 | class AWithMixin(A, Mixin): def __init__(self, *args): A.__init__(self, *args) Mixin.__init__(self) |