我只想创建一个继承两个父项的属性和方法的类。我们只说两个父类是
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类不应该相互依赖。
答案 0 :(得分:0)
据我所知,super
的工作方式是,基于在子类开头声明的超类列表,将制定mro
(方法解析顺序)列表。当您调用supper
(Python 3)时,将调用__init__
列表中第一个类的mro
。 __init__
还应包含另一个super()
,以便__init__
中下一个类的mro
也会被调用。
在您的情况下,mro
列表应为[A, B]
。因此__init__
的{{1}}必须包含A
的调用,以便super
的{{1}}也被调用。
这里的问题是:
__init__
和B
不相互依赖。使用A
需要B
列表,如上所述,该列表不满足此要求。super
的{{1}}有2个参数,而mro
和__init__
的参数只有1.您可以将C
传递给{{ 1}}但我不知道您是否有机会将A
传递给B
。所以在我看来a
在这种情况下无法帮助。