2013-02-23 35 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?