2011-02-09 29 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