【问题标题】:Python Tornado : Instance variable are not saved from a method to anotherPython Tornado:实例变量没有从一个方法保存到另一个
【发布时间】: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 实例,因此 putget 方法将从不同的实例中调用,并且实例属性 needed_file 不会在它们之间共享。
  • 所以你的意思是我必须将这些参数作为类变量传递?
  • 您不必必须,但您不能为此任务使用实例变量。有很多方法可以做到这一点:存储在会话中,存储在数据库中,一些应用程序级存储。实际上,我认为在类级别存储此类变量是一种不好的做法。

标签: python variables reference instance tornado


【解决方案1】:

将实例变量定义为类的一部分

class Test():

    needed_file = []

    def put(self):
        print("put")
        self.needed_file.append('Ninja file')

    def get(self):
        print("get")
        print(self.needed_file)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2023-03-15
    • 2015-06-10
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多