Python对象,垃圾回收
我有一个Python对象,它用来收集一些请求数据,这样我就可以根据通过GET方法收到的过滤条件和排序条件来创建模型查询。(比如说,sort=id&order=DESC...)
class Search( object ):
sorters = []
filters = []
如果请求中有过滤条件和排序条件,这个类的属性就会被填充上正确的参数。这一切都运作得很好,查询也能正常构建。问题是,当我发起第二个请求时,排序和过滤条件会保留上一个请求的值,所以搜索对象并不是新的,而是持续存在的。
你知道为什么会这样吗?顺便说一下,我刚开始学Python,而我之前用PHP时,每个请求都会实例化一个新的对象。
2 个回答
1
如果你想把 sorters
和 filters
作为 Search
类的成员变量,你需要这样来定义它们。
class Search( object ):
def __init__(self, sorters=None, filters=None):
self.sorters = [] if sorters == None else sorters
self.filters = [] if filters == None else filters
这样一来,你可以在创建这个对象的时候直接提供 sorters
和 filters
,或者在之后再给这个对象赋值。也可以两者都做。
7
因为你这样做是创建了类变量,而不是成员变量。类变量是所有实例共享的(它们属于类,而不是某个具体的实例);它们类似于其他语言中的静态成员变量。
要创建成员变量,你需要在构造函数中初始化它们,像这样:
class Search(object):
def __init__(self):
self.sorters = []
self.filters = []