如何检查Python中是否存在静态变量?
这是一个相关的问题: 但是,对于静态变量,它并不能很好地工作 我想做的是:如何检查Python中是否存在静态变量?,python,static-members,Python,Static Members,这是一个相关的问题: 但是,对于静态变量,它并不能很好地工作 我想做的是: class A: def __init__(self): if A.var is null: # this does not work, okay A.var = 'foo' print 'assigned' 好的,因为A.var甚至没有赋值。这引起了错误。所以,我试过这个: class A: def __init__(self):
class A:
def __init__(self):
if A.var is null: # this does not work, okay
A.var = 'foo'
print 'assigned'
好的,因为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()
结果是:
assigned
assigned
这表明如果“A.var”不在globals()中:
行工作不正常
那么,如何检查Python中是否存在静态变量呢?您可以使用:
或者,根据“请求原谅比允许更容易”的原则,有些人更愿意:
try:
A.var
except NameError:
A.var = 'foo'
最后,您只需在类主体中定义默认值:
class A(object):
var = None
...
if A.var is None:
a.var = 'foo'
(请注意,这两种方法都不是线程安全的)Python没有静态变量,因此。。。python中没有静态变量——类上的变量称为类变量。也没有
null
(称为None
)。另外,您正在查找hasattr
。另外,在调用\uuuu init\uuuu
函数之前如何分配class属性?从技术上讲a.var
是一个类变量,而不是一个静态变量。请尝试。。。除了
方法如此简单和简单,我不明白为什么有人会去寻找其他任何东西,因为hasattr
,尽管我不同意选择try/except
方法-hasattr
更短,更具可读性和更明确。经过一点思考后,我认为EAFP方法不仅令人不快,而且在这种情况下完全是错误的。您没有做任何需要权限的事情,因为设置属性总是可能的(给定A
当然对设置属性没有限制)。因此,您甚至必须使用一个无意义的语句,在不以任何方式使用属性的情况下访问属性,以测试“权限”。但实际上,您只想检查一个条件是否满足,条件是“已设置属性x”-这直接转换为上面的if语句。@l4mpi是的,显然,在本例中您是对的。另一方面,如果我们有一个函数than,它返回a.var
,如果缺少属性,则设置该属性,try…catch
会更有意义。
class A(object):
var = None
...
if A.var is None:
a.var = 'foo'