[英]Python: shared methods and attributes in multiple 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):
return self.b + 20
然后我不知道如何创建一个从其父类继承方法和属性的子类 C。 我可以做这样的事情,但我很确定这不是很pythonic......
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
(方法解析顺序)列表。 当您调用supper
(Python 3) 时,将调用mro
列表中第一个类的__init__
。 __init__
也应该包含另一个super()
以便mro
下一个类的__init__
也被调用。
在您的情况下, mro
列表应该是[A, B]
。 所以A
的__init__
必须包含对super
的调用,以便B
的__init__
也被调用。
这里的问题是:
A
和B
不相互依赖。 super
的使用需要一个mro
列表,它不能满足我上面解释的这个要求。C
的__init__
有 2 个参数,而A
和B
只有 1 个。您可以将a
传递给A
但我不知道是否有办法将b
传递给B
。 所以在我看来super
在这种情况下无能为力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.