【发布时间】:2026-02-12 23:30:01
【问题描述】:
在 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()
在标有“#break here”的行上,我得到:
AttributeError: 'instancemethod' object has no attribute 'some_static_var'
我意识到有一个简单的解决方法,我将some_static_var 设为SomeClass 的成员变量。但是,该变量在方法之外确实没有任何用处,所以如果可以的话,我更希望避免它弄乱SomeClass' 命名空间。
【问题讨论】:
-
SomeClass.some_method.im_func.some_static_var = 1怎么样(假设是 python2)
标签: python methods static static-variables