我有一个python对象,它收集一些请求数据,因此我可以根据通过GET方法接收到的过滤器和排序器创建模型查询。(sort=id&order=DESC...)
class Search( object ):
sorters = []
filters = []如果请求具有筛选器和排序器,则使用正确的参数填充类属性。这工作得很好,查询构建得也很好。问题是,当我触发第二个请求时,排序器和过滤器会保留前一个请求中的值,因此搜索对象不是新的,而是持久的。
你知道它为什么会这样吗?顺便说一句,我是python的新手,PHP (我的领域)只会为每个请求实例化一个新的对象。
发布于 2011-06-22 01:50:26
因为以这种方式创建的是类变量而不是成员变量。类变量在每个实例之间共享(它们属于类,而不是实例);它们类似于其他语言中的静态成员变量。
要创建成员变量,需要在构造函数中对其进行初始化,如下所示:
class Search(object):
def __init__(self):
self.sorters = []
self.filters = []发布于 2011-06-22 01:52:23
如果您希望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,或者稍后将它们分配给对象来实例化。或者两者都有。
https://stackoverflow.com/questions/6429627
复制相似问题