1.類的方法第乙個引數必須是 self,並且如果要呼叫類的方法,必須將通過類的例項,即方法繫結例項後才能由例項呼叫。如果不繫結,一般在繼承關係的類之間,可以用 super 函式等方法呼叫。
2.這裡再介紹一種方法,這種方法的呼叫方式跟上述的都不同,這就是:靜態方法和類方法
看**:
__metaclass__ = type
class staticmethod:
@staticmethod
def foo():
print("this is static method foo().")
class classmethod:
@classmethod
def bar(cls):
print("this is class method bar()")
print("bar() is part of class:", cls.__name__)
if __name__ == "__main__":
static_foo = staticmethod() # 例項化
static_foo.foo() # 例項呼叫靜態方法
staticmethod.foo() # 通過類來呼叫靜態方法
print("*****")
class_bar = classmethod()
class_bar.bar()
classmethod.bar()
執行結果:
this is static method foo().
this is static method foo().
*****
this is class method bar()
bar() is part of class: classmethod
this is class method bar()
bar() is part of class: classmethod
@staticmethod 表示下面的方法是靜態方法。
@classmethod 表示下面的方法是類方法
先看靜態方法,雖然名為靜態方法,但也是方法,所以,依然用 def 語句來定義。需要注意的是檔名後面的括號內,沒有 self,這和前面定義的類中的方法是不同的,也正是因著這個不同,才給它另外取了乙個名字叫做靜態方法,否則不就「泯然眾人矣」。如果沒有 self,那麼也就無法訪問例項變數、類和例項的屬性了,因為它們都是借助 self 來傳遞資料的。
再看類方法,同樣也具有一般方法的特點,區別也在引數上。類方法的引數也沒有 self,但是必須有 cls 這個引數。在類方法中,能夠訪問類屬性,但是不能訪問例項屬性。
簡要明確兩種方法。兩種方法都可以通過例項呼叫,即繫結例項。也可以通過類來呼叫,即 staticmethod.foo() 這樣的形式,這也是區別一般方法的地方,一般方法必須用通過繫結例項呼叫。
python中靜態方法和類方法
方法是作為類屬性儲存的函式 def get size self pass在python2,3中的不同點。2 pizza.get size 會報乙個未繫結的函式的錯誤 3 pizza.get size 會報乙個缺少引數的錯誤,即,python3可以動態的傳入方法所屬於的類的任意乙個例項 靜態方法 靜態...
python 類的靜態方法和類方法
1.靜態方法 使用 staticmethod修飾 不需要傳入引數,類和類的例項物件都可以呼叫 沒有引數的方法,如果未宣告靜態方法的話,例項物件呼叫將會出錯 1class a staticmethod 宣告靜態方法 def printa 無需引數 print a a.printa 類名直接呼叫 a a...
Python中的類方法 靜態方法和例項方法
一 例項方法 先定義乙個輸出日期的類date,後面內容都是基於此類進行拓展。class date def init self,year,month,day self.year year self.month month self.day day def str self return format ...