Python之靜態方法、類方法再總結
阿新 • • 發佈:2018-12-07
1、本來之前寫過一篇,結果,尼瑪光照貓畫虎,毛也不知道,當然今天也不一定知道
2、上來我先談談歷史
a、是再Python2.2版本的時候,開始引入靜態方法、類方法
b、於此同時,兩個內建函式(java中稱為註解)staticmethod、classmethod也被引入,一個代表靜態方法、一個代表類方法
3、再說下內建函式 staticmethod和classmethod,其作用就是用於轉化類中的某一方法為靜態方法或者類方法
4、靜態方法
a、靜態方法是類中的函式,不需要物件(例項)。
b、常用於存放業務邏輯性的程式碼
c、而且這些邏輯屬於類,即在靜態方法中,不會使用類中的例項方法和例項變數
5、來個靜態方法的例子
例子中的靜態方法printHello(),一開始我加了一個self,然後給我報錯類,靜態方法就不需要self這個當前物件了
# -*- coding:utf-8 -*- class Tyson(): @staticmethod def printHello(): print "Hello World" if __name__ == "__main__": Tyson.printHello() #第一種呼叫方式,使用類名 firstObject = Tyson() firstObject.printHello() #第二種呼叫方式,使用物件
在靜態方法的呼叫上有兩種方式,如例子總所示
a、直接使用類名
b、使用物件
6、靜態方法的真正好處
a、本來我們把靜態方法,寫在類的外面,作為模組中的一個函式也可以
b、但是為了高度複用,方便維護,放在類裡面作為staticmethod
7、類方法再談談你
a、類方法是將類本身作為物件(這點和java中的class物件有點類似的感覺)
b、它和靜態方法的區別:無論是從類呼叫、還是通過例項物件呼叫
c、都要在第一個引數中把類傳進來
8、來個例子,self或者cls還是必須加的(沒錯,我試了,self或者cls,直譯器都認識)、而且@classmethod也必須要有(在2.x中),在Python3.x中,不加@classmethod、不加self或cls均可
class Tyson():
@classmethod
def printClassName(self):
print "Tyson"
if __name__ == "__main__":
Tyson.printClassName() #第一種呼叫方式
firstObject = Tyson()
firstObject.printClassName() #第二種呼叫方式
@classmethod
def test_static_method(cls):
print "hello"