2016-11-21 77 views
-2

我想從超類的方法中訪問在子類的構造函數中設置的自變量。Python:在超類的未覆蓋方法中從子類訪問變量

class A(object): 
    def __init__(self): 
     self.a = "I'm the class A." 

    def getA(self): 
     return self.a 

class B(A): 
    def __init__(self): 
     super(B, self).__init__() 
     self.a = "I'm the class B." 

x = B() 
print(x.getA()) 

結果總是「A」。爲什麼我不能在子類構造函數中覆蓋超級變量?我對Python的繼承是新手,我認爲它在Java中的工作就像我試過的一樣。

編輯:好的,謝謝你的意見。當然,這確實有效。這只是一個簡短的草圖來演示,我正在嘗試做什麼。原始代碼更復雜,我錯過了一些自我。對我來說還是有點困惑,你必須每次寫自己,因爲它在Java中不是必需的。

+1

除了缺少傳遞給'getA'的'self'之外,我認爲你的代碼可以像你期望的那樣工作......(它打印出「我是B類」)。 – mgilson

+0

如上所述,您發佈的代碼不起作用。它應該是'def getA(self):'。請修復它,然後運行您的示例。它打印出'我是B類'。我們複製/粘貼測試,所以你也可以! – tdelaney

回答

1

我不能重現你的問題,這正確地輸出「我是B類」。因爲它應該和是的,你可以覆蓋子類中的變量。另外,def getA()應爲def getA(self)

對於super您可以像現在這樣使用它,但是如果使用Python 3.x則只需要執行super().__init__()就更簡單了。同樣,如果在3.x不需要object,如果這些是新的風格類(取決於Python版本)。

+0

您的'超級'評論應該在前面說明您可以放棄參數_if_OP正在使用python3.x。由於這個問題沒有被標記爲某種方式,所以我不確定你能否確定OP沒有使用python2.7(雖然我們希望):-) – mgilson

+0

公平點編輯。 – Pythonista