多重继承,给两个 parents' 构造函数一个参数

multiple inheritance, give both parents' constructors an argument

我在python2.7中有以下情况

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'?

还应注意 parent classes 之一,例如 A,是一个库 class 并且解决方案最好假设它是一成不变的;而另一个 class B 是我的,可以随意更改。

正确初始化两个 parent class 的正确方法是什么? 谢谢!

颠倒继承顺序,让你的class调用super库一:

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'

基本思路是修改您的 superclass 以接受两个参数,一个用于自身,另一个将传递给 MRO。

顺便说一句,您可以在 Python 中放弃对 object 的继承 3.


编辑:

Python 2 需要 super 参数调用:

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')