2013-02-23 86 views
0

一個simpilified代碼如下內部變量:龍捲風/ Python的:爲什麼我不能復位類

.... 

class indexHandler(tornado.web.RequestHandler): 
    a=[] 

    def callback(self,response): 
     #Do some other things, like write into database 
     self.a=[] 


    def get(self): 
     print self.a 
     self.a.append('abc') 

     client=tornado.httpclient.AsyncHTTPClient() 
     client.fetch('http://google.com',self.callback) 

     self.write('OK') 
     .... 

當我訪問該網頁第一次,外殼顯示 []。 頁面重新載入後,顯示['abc'],重新載入一次,然後顯示['abc','abc']等等。

爲什麼a不能重置?

+2

因爲'a'不是實例屬性,而是* class *屬性。它在所有實例中共享。 – 2013-02-23 15:12:16

+0

尋找規範的問題來鏈接你,因爲這是所有的時間* *。儘管如此,我不願意將它鏈接到[「Python中最小的驚訝」:可變的默認參數](http://stackoverflow.com/q/1132941)。 – 2013-02-23 15:15:14

+0

有兩個變量。前者是類變量a(使用indexHandler.a可訪問),另一個是實例變量(使用self.a可訪問)。兩者沒有共同之處。 – mkind 2013-02-23 15:15:49

回答

1

謝謝Martijn和mkind! 你們都對,我用__init__它解決了這個問題。

替代a=[]

def initialize(self): 
    self.a=[] 

會解決這個問題。

單獨注意def __init__(self)不起作用,Tornado提供initialize函數來代替它。請閱讀此處:python/tornado – Why am I getting this error?