我想用use class方法初始化类成员但不知道如何调用它。
你能提出一些解决方案 - 也许这是非常微不足道的但我找不到解决方案?
这段代码不起作用 - 我不是为什么?
class X(object):
@staticmethod
def __Y():
return 1
CONSTANT = __Y()
x = X()
print x.CONSTANT
这样可行但我需要使用call方法来初始化类成员。
class X(object):
CONSTANT = 1
x = X()
print x.CONSTANT
注意,我不想初始化对象变量而是类变量。
答案 0 :(得分:5)
删除@staticmethod
装饰器,第一种方法也可以。只需在类声明中调用函数,就不需要staticmethod
。
由于这种方式,当从类实例调用时,该函数将无法使用,它也是一种在使用后也将其删除的习惯用法。在您的示例中:
class X(object):
def __y():
return 1
CONSTANT = __y()
# ... other uses of __y, if any
del __y
要了解您的方法无效的原因,请考虑staticmethod
的作用。它将正常函数包装到descriptor object中,当从类中检索时,它将原始函数保持不变,即没有通常的“绑定方法”语义。 (从实例或类中检索正常的def
函数会得到一个绑定方法,可以自动插入self
作为第一个参数。)
但是,staticmethod
返回的描述符本身不可调用,其唯一的功能是在通过类或实例访问时生成可调用对象。要使staticmethod
描述符可调用的Proposals被拒绝,因为staticmethod
的使用是erroneous in the first place。