多重继承,给两个 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')
我在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')