Sai*_*ait -1 python static-members
这是一个相关的问题:如何检查变量是否存在?
但是,它对静态变量不起作用.
我想要做的是以下,
class A:
def __init__(self):
if A.var is null: # this does not work, okay
A.var = 'foo'
print 'assigned'
Run Code Online (Sandbox Code Playgroud)
好的,因为A.var
甚至没有分配.它引起了错误.所以,我试过这个:
class A:
def __init__(self):
if 'A.var' not in globals(): # this seems to okay, but ..
A.var = 'foo'
print 'assigned'
a = A()
b = A()
Run Code Online (Sandbox Code Playgroud)
结果如下:
assigned
assigned
Run Code Online (Sandbox Code Playgroud)
这表明该if 'A.var' not in globals():
行无法正常工作.
那么,我如何检查Python中是否存在静态变量?
要么使用hasattr
:
if not hasattr(A, 'var'):
A.var = 'foo'
Run Code Online (Sandbox Code Playgroud)
或者,根据"更容易请求宽恕而非许可"原则,有些人更愿意这样做:
try:
A.var
except NameError:
A.var = 'foo'
Run Code Online (Sandbox Code Playgroud)
最后,您只需在类体中定义默认值:
class A(object):
var = None
...
if A.var is None:
a.var = 'foo'
Run Code Online (Sandbox Code Playgroud)
(注意,这两种方法都不是线程安全的)