2014-08-30 47 views
0

我有這樣的代碼:與類的方法分配Python類變量

def my_func(): 
    pass 

class MyClass(): 
    class_variable = my_func() 
    pass 

i = MyClass() 

由於my_func邏輯與MyClass,不服務於它之外的任何目的,我更喜歡有類似的東西,而不是:

class MyClass(): 
    class_variable = my_func() 

    def my_func(): 
     pass 

i = MyClass() 

以上不工作,當然,因爲my_func不是在它被稱爲時間沒有定義。有沒有其他的方法來從類內部分配一個類變量?

回答

2

我親自保留my_func()以外的類。當然,它只能用於類定義,但如果它不是有用的一旦定義類,它不應該是類API的一部分。

如果my_func()函數應該與類一起使用,即使在類已經創建之後,仍然可以使用MyClass.my_func()作爲靜態方法。在這種情況下,定義函數第一設置類變量之前:

class MyClass(): 
    @staticmethod 
    def my_func(): 
     pass 

    class_variable = my_func.__func__() 

@staticmethod不是嚴格必要的,因爲當時class_variable設置my_func仍然是在類定義體內的本地名稱。

但是,既然你是使用它作爲靜態函數無論如何,你也可以這樣標記它。但優點是MyClass.my_func()現在也可以使用。

因爲@staticmethod不會綁定到類或實例屬性上下文之外,所以您首先需要通過訪問具有__func__屬性的包裝函數來解開它。

演示:

>>> class MyClass(): 
... @staticmethod 
... def my_func(): 
...  return 'foobar' 
... class_variable = my_func.__func__() 
... 
>>> MyClass.class_variable 
'foobar' 
>>> MyClass.my_func() 
'foobar'