簡體   English   中英

如何從 Python 中菱形結構的最后一個 class 繼承變量?

[英]How can you inherit variables from last class of a diamond structure in Python?

我在 Python 中有一個菱形類結構,我需要繼承最后一個中三個超類的變量。 這是這個問題的一個例子:

 class Base: def __init__(self, a, b): self.a = a self.b = b class second(Base): def __init__(self, a, b, c): super().__init__(a, b) self.c = c class second2(Base): def __init__(self, a, b, Q): super().__init__(a, b) self.Q = Q class third(second, second2): def __init__(self, a, b, c, Q, d): super().__init__(a, b, c, Q) self.d = d

通過編譯這個例子,我沒有得到任何錯誤,但是如果我嘗試像這樣創建第三個 class 的 istance:

 a = 1 b = 2 c = 3 Q = 4 d = 5 t = third(a, b, c, Q, d)

我收到此錯誤:

 line 26, in <module> t = third(a, b, c, Q, d) line 18, in __init__ super().__init__(a, b, c, Q) TypeError: second.__init__() takes 4 positional arguments but 5 were given

我怎樣才能讓這段代碼正確運行? 那么如何從 class “第三”類繼承 Base、second 和 second2 的變量並添加一個變量“d”?

在這種情況下,我會避免使用super() ,因為您的init () 定義甚至沒有相同數量的參數,這可能是您的問題的原因。 但是,您最終會調用 Base init 兩次,這不是您通常想要的。

 class Base: def __init__(self, a, b): self.a = a self.b = b class second(Base): def __init__(self, a, b, c): Base.__init__(self, a, b) self.c = c class second2(Base): def __init__(self, a, b, Q): Base.__init__(self, a, b) self.Q = Q class third(second, second2): def __init__(self, a, b, c, Q, d): second.__init__(self, a, b, c) second2.__init__(self, a, b, Q) self.d = da = 1 b = 2 c = 3 Q = 4 d = 5 t = third(a, b, c, Q, d) print(f"{ta} {tb} {tc} {tQ} {td}")

希望有幫助。

暫無
暫無

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

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