2012-10-21 19 views
3

在深入Python,馬克朝聖者說:在Python中定義類方法的多種方法?

當定義你的類方法時,你必須明確列出自己作爲每個方法的第一個參數

隨後他給出了幾個例子這個代碼:

def clear(self): self.data.clear() 
def copy(self): 
    if self.__class__ is UserDict: 
     return UserDict(self.data) 
    import copy 
    return copy.copy(self) 

雖然經歷了一些Python代碼在網上,我遇到了@classmethod裝飾。這方面的一個例子是:

class Logger: 
    @classmethod 
    def debug(msg): 
     print "DEBUG: " + msg 

(請注意,有在debug功能沒有self參數)

是否有定義使用self作爲第一個參數類的方法和使用該@classmethod裝飾任何區別?如果不是,是定義更常用/優先於另一種的類方法的一種方法?

+1

'self'表示對類實例的引用。 請參閱http://stackoverflow.com/questions/38238/what-are-class-methods-in-python-for –

回答

7

@classmethod與定義實例方法不同。與@classmethod定義的函數接收作爲第一個參數,與接收特定實例的實例方法相反。有關更多信息,請參閱Python文檔here

+0

謝謝!現在這本書的判斷更有意義。我錯過了他的觀點,並認爲他的意思是類方法(如靜態方法),因爲他只是指在類中定義的方法。因此,'self'是對那個類的實例的引用,當使用'@ classmethod'時顯然不會工作,因爲你沒有實例:) –

0

自我不是,也絕不會隱含。

「自不會成爲隱式的。

具有自是明確的是一件好事,它使代碼清晰的瞭解如何一個變量解析消除歧義。這也使得函數和方法小的區別。」

http://www.python.org/dev/peps/pep-3099/