【发布时间】:2018-05-03 02:14:21
【问题描述】:
我正在为 Tornado 中的实例变量苦苦挣扎。我的代码如下:
def initialize(self):
self.needed_file = []
def put(self):
try:
if something:
self.needed_file.append('Ninja file')
self.needed_file.append(dico_data[0][1].decode('utf-8'))
print(self.needed_file)
except IndexError:
pass
def get(self):
try:
print('//' + str(self.needed_file) + '//')
except AttributeError:
print('{}'.format(ServerHandler.needed_file))
我无法从put(self) to get(self) 打印self.needed_file 的值,解释器给我这个回溯。
['Ninja file', '/Users/corpo/DistributedBuild/]` <----------- print() from put
[I 180503 10:01:59 web:2106] 200 PUT / (::1) 11.87ms
//[]// <--------- print() from get
[E 180503 10:01:59 web:1621] Uncaught exception GET / (192.168.1.189)
当然,未捕获的表达式是一个索引错误异常,因为我要求 get 给我一个列表中它没有的值。
谢谢!
【问题讨论】:
-
对于每个请求,都会创建一个新的 Handler 实例,因此
put和get方法将从不同的实例中调用,并且实例属性needed_file不会在它们之间共享。 -
所以你的意思是我必须将这些参数作为类变量传递?
-
您不必必须,但您不能为此任务使用实例变量。有很多方法可以做到这一点:存储在会话中,存储在数据库中,一些应用程序级存储。实际上,我认为在类级别存储此类变量是一种不好的做法。
标签: python variables reference instance tornado