我的视图装饰器会创建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
- 它在前一个请求中设置了值。所以我写了这条注释行来“清除”变量。
现在我有一个问题 - 这样安全吗?是否有可能一个请求在执行另一个请求期间清除此变量,并且在另一个请求中将被覆盖为无?
答案 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时,getters
和setters
通常不是您想要的,因为您可以在不需要getter或setter的情况下执行instance.some_variable = 5
。