python对象在请求之间意外地持久化列表

时间:2014-04-20 18:41:08

标签: python oop persistence bottle

使用下面的瓶子应用程序重现。

我有一个列表属性的类。我在每个请求上创建了这个类的新实例,并将一个元素追加到类的list属性中。然后,我将列表的长度打印回给用户。

为什么多次访问网页时计数会增加?如果我将属性设置为类'init方法中的空列表,一切正常。

我正在使用gunicorn运行应用程序,并在nginx后面代理gevent worker

import bottle


class MyClass:
    my_list = []

    def __init__(self):
        pass

    def add_to_list(self, var):
        self.my_list.append(var)


app = bottle.app()


@app.route('/')
def index():
    var = 'test'
    my_class = MyClass()
    my_class.add_to_list(var)
    return str(len(my_class.my_list))


if __name__ == '__main__':
    app.run(host="localhost", port=80)

1 个答案:

答案 0 :(得分:0)

类属性在类的所有实例之间共享。您正在寻找的是实例属性:

class MyClass:
    def __init__(self):
        self.my_list = []

    def add_to_list(self, var):
        self.my_list.append(var)

有关详细信息,请参阅this问题。