一、知識點^_^
- 函數:我一般習慣把跟類無關叫成函數,而類裏面實現的叫方法。
-
類方法:也叫類型方法,在該方法上一行,用
@classmethod
進行標記。
第一個參數強制爲cls
,類對象。可以通過這個類對象訪問類屬性,由於沒有傳入類實例對象,所以不能訪問類實例屬性。 -
靜態方法:用
@staticmethod
標記的方法。無內定的參數,類和實例都可以調用,方法有多少參數就必須傳遞多少參數。 -
實例方法:沒有
@classmethod
和@staticmethod
標記的方法是實例方法。
第一個參數強制爲self
,類實例對象。可以通過這個類實例對象訪問類屬性,可以通過類實例對象的__class__
屬性訪問類屬性。
假設該方法有n個參數,類型調用的時候需要給n個參數傳參。而實例調用時則只能傳n-1個參數,因爲第一個參數被系統默認傳遞了實例本身。
二、舉例說明
先來了解一下綁定的概念。
-
綁定binding:它與方法調用相關聯。
首先該方法是類內部定義的函數,是類方法屬性。
類方法中,第一個參數都是self
,表示調用此方法的實例對象,不需要賦值。
且該方法只有在其所屬類擁有實例對象時,才能被調用,即方法綁定到類實例對象上了。
沒有類實例對象時,方法就是未綁定狀態。
上代碼:
def foo(x): # 一般方法
print "executing foo(%s)"%(x)
class A(object):
def foo(self,x): # 實例方法
print "executing foo(%s,%s)"%(self,x)
@classmethod # 類方法
def class_foo(cls,x):
print "executing class_foo(%s,%s)"%(cls,x)
@staticmethod # 靜態方法
def static_foo(x):
print "executing static_foo(%s)"%x
a=A()
1、 一般方法
此方法的工作跟類、實例均無關係。可以直接調用foo(x)。
2、 實例方法
在類裏定義實例方法時第一個參數永遠是實例變量self(綁定類的實例),實例方法的調用離不開實例,調用:a.foo(x),其中a是A的實例。
3、 類方法 @classmethod
類方法定義時需要去綁定類(即通過cls)。調用的時候傳遞的是類,調用:A.class_foo(x),其中A是類。
4、 靜態方法@staticmethod
與普通方法一樣,不需要對類或實例進行綁定,but調用時需要通過類或實例,調用:a.static_foo(x)或A.static_foo(x)。
❤ thanks for watching, keep on updating...
點個贊再走吧