Python对象,垃圾回收

4 投票
2 回答
822 浏览
提问于 2025-04-16 20:01

我有一个Python对象,它用来收集一些请求数据,这样我就可以根据通过GET方法收到的过滤条件和排序条件来创建模型查询。(比如说,sort=id&order=DESC...)

class Search( object ):

    sorters = []
    filters = []

如果请求中有过滤条件和排序条件,这个类的属性就会被填充上正确的参数。这一切都运作得很好,查询也能正常构建。问题是,当我发起第二个请求时,排序和过滤条件会保留上一个请求的值,所以搜索对象并不是新的,而是持续存在的。

你知道为什么会这样吗?顺便说一下,我刚开始学Python,而我之前用PHP时,每个请求都会实例化一个新的对象。

2 个回答

1

如果你想把 sortersfilters 作为 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

这样一来,你可以在创建这个对象的时候直接提供 sortersfilters,或者在之后再给这个对象赋值。也可以两者都做。

7

因为你这样做是创建了类变量,而不是成员变量。类变量是所有实例共享的(它们属于类,而不是某个具体的实例);它们类似于其他语言中的静态成员变量。

要创建成员变量,你需要在构造函数中初始化它们,像这样:

class Search(object):
    def __init__(self):
        self.sorters = []
        self.filters = []

撰写回答