multiple inheritance, give both parents' constructors an argument
本问题已经有最佳答案,请猛点这里访问。
我在Python2.7中有以下情况:
1 2 3 4 5 6 7 8 9 10 11 | class A(object): def __init__(self, a): self._a = a class B(object): def __init__(self, b): self._b = b class C(A, B): def __init__(self): # How to init A with 'foo' and B with 'bar'? |
还应该注意的是,父类(比如A)中的一个是库类,解决方案最好假设它设置在Stone中;而另一个B类是我的,可以自由更改。
正确初始化两个父类的正确方法是什么?谢谢!
颠倒继承顺序,让您的类在库1上调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | In [1375]: class A(object): ...: def __init__(self, a): ...: self._a = a ...: ...: class B(object): ...: def __init__(self, b, a): ...: self._b = b ...: super().__init__(a) ...: ...: class C(B, A): ...: def __init__(self): ...: super().__init__('bar', 'foo') ...: In [1376]: c = C() In [1377]: c._a Out[1377]: 'foo' In [1378]: c._b Out[1378]: 'bar' |
基本思想是修改超类以接受两个参数,一个参数本身,另一个参数将被传递到MRO之后。
另外,您可以在python 3中删除来自
编辑:
python 2需要带参数的
1 2 3 4 5 6 7 8 | class B(object): def __init__(self, b, a): self._b = b super(B, self).__init__(a) class C(B, A): def __init__(self): super(C, self).__init__('bar', 'foo') |