像函數一樣,Python中的類方法也是一種對象。由於既可以通過實例也可以通過類來訪問方法,所以在Python里有兩種風格:
未綁定的類方法:沒有self
通過類來引用方法返回一個未綁定方法對象。要調用它,你必須顯示地提供一個實例作為第一個參數。
綁定的實例方法:有self
通過實例訪問方法返回一個綁定的方法對象。Python自動地給方法綁定一個實例,所以我們調用它時不用再傳一個實例參數。
兩種方法都是對象,它們可以被傳遞、存入列表等待。兩者運行時都需要一個實例作為第一參數(妤一個self值),但當通過一個實例調用一個綁定方法時Python自動會提供一個。例如我們運行如下的代碼:
class Test:
def func(self,message):
print message
object1=Test()
x=object1.func
x('綁定方法對象,實例是隱含的')
t=Test.func
t(object1,'未綁定的方法對象,需要傳遞一個實例')
#t('未綁定的方法對象,需要傳遞一個實例') #錯誤的調用
object1=Test()生成一個實例,object1.func返回一個綁定的方法,把實例object1和方法func綁定。
而Test.func是用類去引用方法,我們得到一個未綁定的方法對象。要調用它就得傳一個實例參數,如t(object1,'未綁定的方法對象,需要傳遞一個實例') 。
大多數時候,我們都直接調用方法,所以一般不會注意到方法對象。但是如果開始寫通用的調用對象的代碼時,需要特別仔細地注意未綁定方法,它們需要地傳一個實例參數。
出處:http://blog.csdn.net/stuscs/article/details/40110815
另一個:http://blog.sina.com.cn/s/blog_53b458740101779i.html