Python:多重继承中的共享方法和属性
我只想创建一个从两个父级继承属性和方法的类。让我们假设两个父类是Python:多重继承中的共享方法和属性,python,inheritance,Python,Inheritance,我只想创建一个从两个父级继承属性和方法的类。让我们假设两个父类是 class A(object): def __init__(self, a): self.a = a def method_a(self): return self.a + 10 class B(object): def __init__(self, b): self.b = b def method_b(self): retu
class A(object):
def __init__(self, a):
self.a = a
def method_a(self):
return self.a + 10
class B(object):
def __init__(self, b):
self.b = b
def method_b(self):
return self.b + 20
然后我不知道如何创建一个子类C,它从其父类继承方法和属性。我可以做这样的事情,但我很确定这不是很像蟒蛇
class C(A, B):
def __init__(self, a, b):
A.__init__(self, a=a)
B.__init__(self, b=b)
这样我就可以毫无问题地做到这一点
my_class = C(a=1, b=2)
print(my_class.a)
print(my_class.b)
print(my_class.method_a())
print(my_class.method_b())
我不知道如何设置
super
来继承来自父母双方的方法和属性,如果有任何帮助,我将不胜感激!顺便说一下:A类和B类不应该相互依赖。据我所知,super
的工作方式是,基于子类开头声明的超类列表,将计算出一个mro
(方法解析顺序)列表。当您调用super
(python3)时,将调用mro
列表中第一个类的\uuuu init\uuuu
。该\uuuuu init\uuuuuu
还应包含另一个super()
,以便mro
中下一个类的\uuuuuuu
也被调用
在您的情况下,mro
列表应该是[A,B]
。因此A
的\uuuuuu init\uuuu
必须包含对super
的调用,以便B
的\uuuu init\uuuu
也被调用
这里的问题是:
- 您希望
和A
不相互依赖。B
的使用需要一个super
列表,正如我上面解释的,该列表不满足此要求mro
的C
有2个参数,而\uuuu init\uuuu
和A
的只有1个参数。您可以将B
传递到a
,但我不知道是否有办法将a
传递到b
b
所以在我看来,
super
在这种情况下帮不上忙。这样的信息可以通过快速的谷歌搜索轻松找到。嘿。谢谢你的回答。我只留下了显式构造函数调用,正如上面在原始文章中定义的那样。看起来效果不错!