2013-05-31 72 views
1
class Something(object): 
    our_random = Something.random_thing 

    @staticmethod 
    def random_thing(): 
     return 4 

當然,這不起作用,因爲當我嘗試調用它的方法時,某些東西不存在。也沒有這樣的:設置類屬性時引用方法

class Something(object): 
    our_random = random_thing 

    @staticmethod 
    def random_thing(): 
     return 4 

我「解決」這僅通過將random_thing()的定義類以上,但我覺得這是凌亂。

+0

您是不是要調用'random_thing'? –

回答

3

調用它在.__init__()初始化則:

class Something(object): 
    def __init__(self): 
     self.our_random = Something.random_thing() 

或調用靜態方法後,你定義它,但仍被定義的類;因爲它是一個靜態方法,你必須通過__func__屬性來訪問它:

class Something(object): 
    @staticmethod 
    def random_thing(): 
     return 4 

    our_random = random_thing.__func__() 

如果你並不想調用它,只需要創建一個方法的副本用不同的名稱,只是做所以你定義後:

class Something(object): 
    @staticmethod 
    def random_thing(): 
     return 4 

    our_random = random_thing # our_random as an alias for random_thing 

類體作爲一個功能來執行,與當時形成的類屬性的函數的局部命名空間。所以,就像一個函數一樣,如果你想引用其他對象,你需要確保它們是首先定義的。

2
class Something(object): 
    @staticmethod 
    def random_thing(): 
     return 4 

    our_random = random_thing 

類定義創建一個命名空間,所以你可以參考類體中的其他名字(類屬性),而不需要通過類來訪問它們。