如何检查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'