python中的类变量初始化



我有一个类,它的变量应该是这个类的一个实例。我不能在声明行创建实例,因为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

然而,对我来说,它看起来非常非python。如有任何关于如何使用这种静态变量作为默认参数的建议,我将不胜感激。

Python不支持像c++这样的语言所支持的'静态'变量。在这种情况下,'static_variable'实际上是一个类变量这就是你遇到这个问题的原因。我相信你已经知道了这一点,但其他人可能会在某一天偶然发现我们称其为静态变量,所以我们似乎应该为子孙后代澄清这一点。

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

可以在some_method()中使用关键字参数吗?

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

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()

最新更新