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

标签 python static-members

这是一个相关问题:How do I check if a variable exists?

但是,它对于静态变量效果不佳。

我正在尝试执行以下操作,

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

这表明 if 'A.var' not in globals(): 行无法正常工作。

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

最佳答案

要么使用 hasattr :

if not hasattr(A, 'var'):
    A.var = 'foo'

或者,正如有些人所希望的那样,根据“请求宽恕比请求许可更容易”的原则:

try:
    A.var
except NameError:
    A.var = 'foo'

最后,您可以简单地在类主体中定义默认值:

class A(object):
    var = None
    ...

if A.var is None:
    a.var = 'foo'

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

关于python - Python 中如何检查静态变量是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098390/

相关文章:

python - 使用 Gekko 划分楼层

python - 如何遍历给定目录中的文件?

java - 这两种初始化静态变量的方式有什么区别?

python - 指数值不均匀的 Pandas Dataframe 绘图会产生偏斜图

python - bsddb3.db.DBRunRecoveryError

python - 正则表达式统一 Python 中的电话号码格式

c++ - 当像静态变量一样访问时,类的非静态成员的地址将地址打印为 1

java - 静态成员的顺序在 Swing 中是否敏感?

java - 为什么我的静态变量的值每次调用时都会改变?

c++ - 为什么我们不能有非常量类级别的静态变量?