我试图在我的方法中实现一个所谓的静态变量,类似于decorator method described in this Stackoverflow thread。具体地讲,我限定一个装饰功能如下:类中的函数实例变量
def static_var(varName, value):
def decorate(function):
setattr(function,varName,value)
return function
return decorate
如示例所示,这可以用于一个变量连接到功能:
@static_var('seed', 0)
def counter():
counter.seed +=1
return counter.seed
此方法将返回的次数它已被调用。
我遇到的问题是,这不,如果我定义一个类里面的方法工作:如果我实例化一个Circle
和运行counter
class Circle(object):
@static_var('seed',0)
def counter(self):
counter.seed +=1
return counter.seed
,
>>>> myCircle = Circle()
>>>> myCircle.counter()
我得到的以下错误:NameError: global name 'counter' is not defined
。
我的回应是,也许我需要使用self.counter
,即
class Circle(object):
@static_var('seed',0)
def counter(self):
self.counter.seed +=1
return self.counter.seed
然而,这会产生错误,AttributeError: 'instancemethod' object has no attribute 'seed'
。
这是怎么回事?
啊,我看。我确实尝试过'Circle.counter.seed',但我使用的是Python 2.7,所以当然它不起作用。 – AnjoMan
'Circle.counter .__ func __。seed'也可以。 –
当然,一旦你有一堂课,你也可以将实例存储在实例中并完成。 – Marcin