如何避免变量在多个请求中持久化?

时间:2013-01-30 21:22:03

标签: python django django-views

我的视图装饰器会创建SomeClass的新实例,并使用此参数调用原始视图函数。

def decorator(orig_func):
    def inner_func(request, *args, **kwargs):
        api = SomeClass(request)
        return orig_func(request, api, *args, **kwargs)

问题是SomeClass内的属性(变量)似乎在许多请求中是持久的 - 例如,当执行view_one时,它在apu(SomeClass)类中设置了一些属性。在view_two的第二个请求中,仍然使用第一个请求的值设置这些属性。我怎么能避免这个?我需要简单的解决方案。


这里是SomeClass:

class SomeClass:
    some_variable = None

    def __init__(self,value):
        #self.some_variable = None

    def setVariable(self,value):
        self.some_variable = value

    def getVariable(self):
        return self.some_variable

我的问题是,当执行请求并评论注释行时,some_variable不是neccessery None - 它在前一个请求中设置了值。所以我写了这条注释行来“清除”变量。

现在我有一个问题 - 这样安全吗?是否有可能一个请求在执行另一个请求期间清除此变量,并且在另一个请求中将被覆盖为无?

1 个答案:

答案 0 :(得分:1)

以下是您想要的正确类定义。

class SomeClass:
    def __init__(self,value):
        self.some_variable = value

    def setVariable(self,value):
        self.some_variable = value

    def getVariable(self):
        return self.some_variable

这会在instance而不是class对象上设置属性。

>>> a = SomeClass(5)
>>> a.some_variable # Just as expected
5
>>> b = SomeClass(10)
>>> b.some_variable # This is its own variable
10
>>> b.some_variable = 20 # This won't change 'a'
>>> a.some_variable # Hasn't changed
5

我可能还想注意,在编写python时,getterssetters通常不是您想要的,因为您可以在不需要getter或setter的情况下执行instance.some_variable = 5