python中的类变量初始化

时间:2015-06-09 12:03:20

标签: python oop static static-variables

我有一个带有变量的类,它应该是这个类的一个实例。我无法在声明行创建实例,因为python解释器在那时不知道如何构造对象。有一种可能的解决方法:在类声明后初始化。

class A(object):
    static_variable = None

    def some_method(self, a=static_variable):
       print a

A.static_variable = A()

但我需要将该类变量用作默认参数。可以通过这种方式解决问题:

def some_method(self, a=None):
    a = a if a else A.static_variable
    print a

然而,它对我来说看起来非常不敏感。任何关于如何使用这种静态变量作为默认参数的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

Python不支持'静态'在像C ++这样的语言的意义上的变量。所以在这种情况下,' static_variable'实际上是一个类变量,这就是你遇到这个问题的原因。我确定你已经知道了这一点,但是其他人可能会在某一天偶然发现并且看到我们将其称为静态变量,所以我们应该为后代清楚这一点。

我在想,因为' static_variable'仍然是A类的成员,那么也许有一种方法可以完全不使用它作为参数。

你能在some_method()中使用关键字参数吗?

而不是将其用作函数的默认参数,您只需调用变量' A.static_variable'如果没有使用kwarg。

class A(object):
    static_variable = None

    def some_method(self, *, a=None):
        if a:
            print(a)
        else:
            print(A.static_variable)

A.static_variable = A()