我想用use类方法初始化类成员但不知道如何调用它.
你能提出一些解决方案 - 也许这是非常微不足道的但我找不到解决方案?
这段代码不起作用 - 我不是为什么?
class X(object):
@staticmethod
def __Y():
return 1
CONSTANT = __Y()
x = X()
print x.CONSTANT
Run Code Online (Sandbox Code Playgroud)
这将工作但我需要使用调用方法来初始化类成员.
class X(object):
CONSTANT = 1
x = X()
print x.CONSTANT
Run Code Online (Sandbox Code Playgroud)
注意,我不想初始化对象变量而是类变量.
删除@staticmethod装饰器,第一种方法也可以.您不需要staticmethod只调用类语句中的函数.
由于这种方式,当从类实例调用时,该函数将不可用,所以在使用后删除它也是一种习惯用法.在你的例子中:
class X(object):
def __y():
return 1
CONSTANT = __y()
# ... other uses of __y, if any
del __y
Run Code Online (Sandbox Code Playgroud)
要了解为什么你的方法不起作用,请考虑一下staticmethod.它将一个普通函数包装到一个描述符对象中,当从类中检索时,它生成原始函数,即没有通常的"绑定方法"语义.(def从实例或类中检索正常函数会得到一个自动插入的绑定方法self作为第一个参数.)
但是,返回的描述符staticmethod本身不可调用,其唯一的功能是在通过类或实例访问时生成可调用对象.使描述符可调用的提议staticmethod被拒绝,因为这种使用首先staticmethod是错误的.