如何检查Python中是否存在静态变量?

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中是否存在静态变量?

ber*_*eal 6

要么使用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)

(注意,这两种方法都不是线程安全的)

  • 支持 `hasattr`,尽管我不同意更喜欢 `try/except` 方法 - `hasattr` 更短、更易读、更明确。 (2认同)