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

时间:2013-05-09 07:42:28

标签: python

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

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

1 个答案:

答案 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