1. 程式人生 > >Python之靜態方法、類方法再總結

Python之靜態方法、類方法再總結

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"