2011-02-09 76 views
0

我愿做线沿线的东西...如何在类属性中引用python对象的classmethods?

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

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

但它会告诉我没有定义MyClassA当我尝试运行它。

  • an_attr必须是类属性
  • 我不能改变AnotherClassB
  • 我宁愿如果hello()仍然是一个类方法

任何想法?

回答

3

你只需要拿到订单的权利,所以它被定义在使用它之前:

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

    an_attr = AnotherClassB(do_something=hello) 

需要注意的是,因为它的命名空间中的时候,我们正在创建的类,我们只是参考到hello,而不是MyClassA.hello

编辑:对不起,这实际上并没有做我认为它做的。它创建的类没有错误,但AnotherClassB只获取未绑定的classmethod的引用,它不能被调用。

3

定义一个类时,该类尚不存在。所以,你必须推迟an_attr创作,直到类定义后:

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

user387821无论如何只是打你到那里+1。 – 2011-02-09 12:42:32

+0

@StephenPaulger:好的,我首先发布了答案,因为通过选择上面的排序顺序可以很容易地看到。并不是说它会以任何方式... :) – 2011-02-09 12:58:09

2

我不知道这是否会工作,但尝试一下?

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

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

我害怕答案可能是这样的:)谢谢,它的作品。 – 2011-02-09 12:40:55