python中的类变量初始化
问题描述:
我有一个类应该是这个类的一个实例。我不能在声明行创建一个实例,因为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不支持“静态”变量,就像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()
使用'param = None'然后测试'如果parem是None'绝对是pythonic。 –
为什么实例需要成为该类的一个变量?为什么不直接在模块级别定义它? –
@DanielRoseman是的,我可以在模块级别定义它,但仍不能解决默认参数的问题。 – midas