[英]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.