Python和类变量的初始化 - 如何使用类方法初始化成员?

Cha*_*eon 3 python

我想用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)

注意,我不想初始化对象变量而是类变量.

use*_*342 5

删除@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错误的.