簡體   English   中英

Python:多重繼承中的共享方法和屬性

[英]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__也被調用。

這里的問題是:

  • 您希望AB不相互依賴。 super的使用需要一個mro列表,它不能滿足我上面解釋的這個要求。
  • C__init__有 2 個參數,而AB只有 1 個。您可以將a傳遞給A但我不知道是否有辦法將b傳遞給B

所以在我看來super在這種情況下無能為力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM