2017-06-05 71 views
1

我想通過擴展總是具有相同的第一階段的方法,子類化說:如何在Python 3中重用超類方法的變量?

class Data: 
    def show(self): 
    # this part is common for all subclasses 
     total=10 

class PrintA(Data): 
    def show(self): 
     Data.show(self) 
     print(total) 

class PrintAPlus(Data): 
    def show(self): 
     Data.show(self) 
     print(total+10) 

不過,我得到NameError: name a is not defined

如何重用total變量從超類的方法? (最明顯的一種是將其保存爲實例的屬性,但我不需要在那裏,其實。)

+0

簡短的回答返回值:你不能。 – jonrsharpe

+7

*明顯的是將它作爲實例的屬性* < - yep保存,就是這樣。或者你可以從父方法返回它,並使用該返回值。 – wim

+0

如果你不想'total'作爲公共屬性,你可以在它之前用'_'定義它爲private。但是,通過將'total'定義爲屬性(無論是公共還是私人取決於你)來做到這一點的正確方法是 –

回答

2

這裏的問題是,total只超類方法show內部分配,存在的僅僅是局部變量。它的價值無法在其外面看到。

解決它,你需要使它成爲一個實例屬性或從那裏

選項1

class Data: 
    def show(self): 
    # this part is common for all subclasses 
     self.total = 10 

class PrintA(Data): 
    def show(self): 
     Data.show(self) 
     print(self.total) 

class PrintAPlus(Data): 
    def show(self): 
     Data.show(self) 
     print(self.total+10) 

選項2

class Data: 
    def show(self): 
    # this part is common for all subclasses 
     return 10 

class PrintA(Data): 
    def show(self): 
     total = Data.show(self) 
     print(total) 

class PrintAPlus(Data): 
    def show(self): 
     total = Data.show(self) 
     print(total+10) 
+0

也就是說,父級的方法及其擴展不具有相同的範圍? – homocomputeris

+0

@homocomputeris不,每個人都有自己的範圍 – Copperfield

相關問題