我有一些職責不同的類,它們不共享任何方法。 但是,我想在所有這些類中共享一些共同的變數。 為了實作這一目標,我選擇了繼承,但這似乎并不像我所期望的那樣有效。
在這個問題中提出了一種不同的方法,但我不喜歡將所有實體傳遞給每個建構式。
在我目前所做的測驗中,似乎一個類的每個實體都會實體化它自己的超類實體。因此,沒有變數是在類之間共享的,而是在實體中分割。
一個MWE來解釋:
。class Parent。
def __init__(self):
self.var1 = None。
class Child1(Parent)。
def __init__(self, var1)。
super().__init__()
self.var1 = var1
class Child2(Parent)。
def __init__(self, var1)。
super().__init__()
self.var1 = var1
child1 = Child1(1)
child2 = Child2(2)
print(child1.var1) # prints 1.
print(child2.var1) # prints 2。
我是Python的新手,但似乎我有錯誤的理解。
我所期望的行為是,兩次2都會被列印出來,因為child2是最后被實體化的,因此為child1也設定了var1=2。
我如何使子類共享相同的超類實體& 變數?我是否必須從超類向下實體化,而不是從子類向上實體化?
編輯:Whoops,對不起,我是個初學者,Karl! 我想我應該去看一下組合。
uj5u.com熱心網友回復:
你把instance variables和class variables搞錯了。在這里,你定義了實體變數,因為賦值是在__init__(實體的初始化)里面。
你想要的是定義一個類變數,像這樣 :
class Parent:
var1 = None.
class Child1(Parent)。
def __init__(self, var1)。
super().__init__()
Parent.var1 = var1
class Child2(Parent)。
def __init__(self, var1)。
super().__init__()
Parent.var1 = var1
child1 = Child1(1)
child2 = Child2(2)
print(child1.var1) # prints 2 !! <-----
print(child2.var1) # prints 2
之前,每個實體都有自己的var1變數,根據定義,這就是實體變數的作用。
但是在我的例子中,var1變數被定義在類物件中。每個實體都可以參考它 (使用 Parent.var1),但它始終是同一個變數。但是 Python 很好,它允許你訪問 類變數,就好像它們是 實體變數,這可能會引起混淆。
但是請記住,現在這就是繼承的設計目的。是的,你可以使用這種方式,但它有點不尋常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/316462.html
標籤:
