如何在类属性中引用python对象类方法?

时间:2011-02-09 12:29:57

标签: python

我想做的事情......

class MyClassA(object):
    an_attr = AnotherClassB(do_something=MyClassA.hello)

    @classmethod
    def hello(cls):
        return "Hello"

然而,当我尝试运行时,它会告诉我MyClassA没有被定义。

  • an_attr必须是类属性
  • 我无法改变AnotherClassB
  • 如果hello()仍然是一个类方法
  • ,我更愿意

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

在定义类时,该类尚不存在。因此,您必须将an_attr的创建推迟到类定义之后:

class MyClassA(object):
    @classmethod
    def hello(cls):
        return "Hello"
MyClassA.an_attr = AnotherClassB(do_something=MyClassA.hello)

答案 1 :(得分:3)

你必须得到正确的订单,所以在你使用它之前就定义了它:

class MyClassA(object):
    @classmethod
    def hello(cls):
        return "Hello"

    an_attr = AnotherClassB(do_something=hello)

请注意,因为我们在创建课程时它位于命名空间中,所以我们只引用hello,而不是MyClassA.hello

编辑:抱歉,这实际上并没有按照我的想法行事。它创建没有错误的类,但AnotherClassB只获得对未绑定的classmethod的引用,该方法无法调用。

答案 2 :(得分:2)

我不确定这是否有效,但试试看?

class MyClassA(object):
    @classmethod
    def hello(cls):
        return "Hello"

  MyClassA.an_attr = AnotherClassB(do_something=MyClassA.hello)