2015-02-08 34 views
1

我是Vikki,我正在學習python。 我有下面的查詢, 我有一個基類繼承是如何在Python中工作的

class Parent: 
    def returnsString(self, str): 
      return self.txt 

同樣,也有在父類中其他一些功能,如 returnInt,returnBool等。

現在我創建的其他類:

class Child(Parent): 
    def main(): 
    obj = Child() 
    print('Trying Inheriting here : ',obj.returnsString()) 

AttributeError: 'Child' object has no attribute returnsString 

現在,在Java中,我們當擴展一個類,那麼我們的基類的方法和對象的直接訪問,但在python,如果我想類似的方法我無法這樣做。

有人可以指導我,如果我們可以訪問基類的所有方法和屬性或在Python中每次我必須重寫函數, 有人可以請幫助我。

+0

如何通過派生類實例調用基類方法的簡短答案是:'super(Child,obj).returnsString()',其中'obj'是派生類'而'Child'是派生類的名稱。 – 2015-02-08 20:20:59

回答

0

你的代碼有一些錯誤。 首先,你的BaseClass定義對我來說是模糊的。 self.txt屬性分配在哪裏?您沒有定義您的構造函數,您應該在其中初始化所有屬性。也。您並不需要參數爲returnsString方法,因爲您所做的只是返回值self.txt。 嘗試是這樣的:

class Parent: 
    def __init__(self): 
     self.txt = "Base class str." 

    def returnsString(self): 
      return self.txt 

如果你不想在你的派生類重載任何東西,它的定義可能是這樣的:

class Child(Parent): 
    pass 

有了這個設置,您現在就可以測試你的returnsString方法:

def main(): 
    obj = Child() 
    print('Trying Inheriting here : ', obj.returnsString()) 

if __name__ == '__main__': 
    main() 

執行你的Python腳本的輸出將是:

嘗試繼承此處:基類str。

1

此代碼中的當前錯誤是您自己調用了Child()方法。 obj = Child()這意味着你實例化了自己的一個副本,而不是父類對象,這不是好的做法IMO。如果您想要訪問同一對象中的其他項目,請考慮明確宣佈self.<insert item name>,這會增加可讀性和清潔度。

其他任何你可能需要的是非常詳細的here,python.org參考是你最好的答案。

PS。不要說那些類和它們的方法可能會從py2顯着變化到py3。我已經考慮py3下的答案。

PPS。使用以下代碼並再次運行它。

obj = Parent; 

PPPS。總是嘗試和寫,在哪裏行斷裂。對初學者來說更好,翻譯可能會給你更清晰的錯誤報告。

+0

謝謝喬治,一定會標記你的建議,非常感謝你:) – 2015-02-08 20:31:13

+0

如果你是如此善良,要麼接受它作爲答案或點,我會很感激。很高興我能幫上忙。 – karloluis 2015-02-08 21:30:27