В методе Python я хотел бы иметь локальную переменную, значение которой сохраняется между вызовами метода.статические переменные внутри метода python
This question показывает, как объявить такие «статические переменные» (терминология C++) внутри функций. Я попытался сделать то же самое в методе экземпляра и потерпел неудачу.
Вот рабочий минимальный пример, который воспроизводит проблему. Вы можете скопировать его в интерпретатор.
class SomeClass(object):
def some_method(self):
if not hasattr(SomeClass.some_method, 'some_static_var'):
SomeClass.some_method.some_static_var = 1 # breaks here
for i in range(3):
print SomeClass.some_method.some_static_var
SomeClass.some_method.some_static_var += 1
if __name__ == '__main__':
some_instance = SomeClass()
some_instance.some_method()
На линии с надписью "# перерывами здесь", я получаю:
AttributeError: 'instancemethod' object has no attribute 'some_static_var'
Я понимаю, что есть простой обходной путь, где я делаю some_static_var
переменный член SomeClass
. Тем не менее, переменная действительно бесполезна вне метода, поэтому я бы предпочел удержать ее от загромождения пространства имен SomeClass
, если бы мог.
насчет 'SomeClass. some_method.im_func.some_static_var = 1' (Предполагая python2) –