Я пытаюсь реализовать так называемую статическую переменную в моем методе, подобную методу qaru.site/info/17178/.... В частности, я определяю функцию декоратора следующим образом:
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
Этот метод вернет количество раз, когда оно было вызвано.
Проблема, с которой я сталкиваюсь, заключается в том, что это не работает, если я определяю метод внутри класса:
class Circle(object):
@static_var('seed',0)
def counter(self):
counter.seed +=1
return counter.seed
Если я создаю экземпляр Circle
и запустим counter
,
>>>> 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'
.
Что здесь происходит?