2014-10-09 47 views
0
class dad(): 
    dadthing = "i like pandas" 


class son(dad): 
    print "dad and %s" % dadthing 


x = son() 
x 

什麼即時試圖做類似的,當我通過子類中運行它說dadthing沒有定義,但如果我只是調用變量一樣繼承變量在字符串內部時未定義?

print x.dadthing 

它調用變量就好了。那是怎麼回事?

回答

1

會發生什麼情況是您正在嘗試在班級的正文中使用打印命令。當一個類被加載到內存中時,類的主體只被讀取一次。

從類身體,你不能訪問父類的屬性是這樣的:

print "dad and %s" % dadthing 

,因爲變量dadthing並不真正存在於子類範圍。這就是解釋器告訴你變量沒有被定義的原因。

如果您要訪問從該點的父類的屬性,這將是這樣:

print "dad and %s" % dad.dadthing #calling a class property 

如果你試試這個,甚至沒有實例化類,你會看到該變量打印,因爲你正在調用一個類屬性,而不是一個實例屬性。

class dad(): 
    dadthing = "i like pandas" 


class son(dad): 
    print dad.dadthing #calling a class property 

您必須從__init__函數調用實例屬性。 __init__方法是構造函數。當完全創建對象時調用此方法。

class dad(): 
    dadthing = "i like pandas" 


class son(dad): 
    def __init__(self): 
     print "dad and %s" % self.dadthing 


x = son() 
+1

下面是在Python中定義類時發生的情況的深入說明http://eli.thegreenplace.net/2012/06/15/under-the-hood-of-python-類定義。基本上,在類聲明之下寫入的語句在類存在之前執行。 – jdehesa 2014-10-09 15:42:14

+0

你是對的@javidcf。如果說父級的財產不能從那裏獲得,那將是更正確的。 – miso 2014-10-09 15:45:56