Python 速查手冊- 6.5 static 方法與類別方法 - 程式語言教學誌

文章推薦指數: 80 %
投票人數:10人

本篇文章介紹Python 類別的static 方法與類別方法。

... static 方法(static method) 與類別方法(class method) 都是透過類別(class) 名稱呼叫,然而兩者不同的 ... Python速查手冊 6.5static方法與類別方法 static方法(staticmethod)與類別方法(classmethod)都是透過類別(class)名稱呼叫,然而兩者不同的是static方法不帶預設參數(parameter),這是說如果static方法要用到類別屬性(classattribute)的話,一樣要用類別名稱使用。

static在C-Style的程式語言中多半是關鍵字(keyword),這些程式語言裡static的用途也不完全一樣,至於Python的類別方法及static方法都是用內建函數(built-infunction)來處理,而static並不是Python的關鍵字,特此說明。

先來看到類別方法的簡單定義,這裡Demo類別的demo()方法準備當作類別方法,如果要讓demo()變成類別方法,就要用demo當內建函數classmethod()的參數,然後取得回傳值(returnvalue)指派給demo classDemo: i=0 defdemo(cls): print(cls.i) demo=classmethod(demo) Demo.demo() #《程式語言教學誌》的範例程式 #http://kaiching.org/ #檔名:static01.py #功能:示範定義類別 #作者:張凱慶 於命令列執行以上程式,結果如下 $python3static01.py 0 $ static方法的定義也一樣,要換成用內建函數staticmethod(),留意static方法沒有預設參數 classDemo2: i=1 defdemo(): print(Demo2.i) demo=staticmethod(demo) Demo2.demo() #《程式語言教學誌》的範例程式 #http://kaiching.org/ #檔名:static02.py #功能:示範定義類別 #作者:張凱慶 於命令列執行以上程式,結果如下 $python3static02.py 1 $ 如果直接用裝飾子(decorator)加在類別方法的上一行,類別方法就不需要用demo當內建函數classmethod()參數的回傳值,定義上就更清楚了 classDemo3: i=2 @classmethod defdemo(cls): print(cls.i) Demo3.demo() #《程式語言教學誌》的範例程式 #http://kaiching.org/ #檔名:static03.py #功能:示範定義類別 #作者:張凱慶 於命令列執行以上程式,結果如下 $python3static03.py 2 $ 同樣如果用裝飾子加在static方法的上一行,這也簡化static方法的定義 classDemo4: i=3 @staticmethod defdemo(): print(Demo4.i) Demo4.demo() #《程式語言教學誌》的範例程式 #http://kaiching.org/ #檔名:static04.py #功能:示範定義類別 #作者:張凱慶 於命令列執行以上程式,結果如下 $python3static04.py 3 $ 注意static方法就像是透過類別名稱呼叫的函數(function),因此在static方法中使用類別屬性要用類別名稱,使用實體屬性也要建立物件(object)實體(instance),如此例Demo5類別的static方法demo印出類別屬性i及實體屬性j的值,類別屬性i是直接用類別名稱Demo5取得,實體屬性j則是用Demo5後面加上小括弧,也就是Demo5的建構子回傳的實體物件,再加上小數點取得實體屬性j classDemo5: i=4 def__init__(self): self.j=5 @staticmethod defdemo(): print(Demo5.i) print(Demo5().j) Demo5.demo() #《程式語言教學誌》的範例程式 #http://kaiching.org/ #檔名:static05.py #功能:示範定義類別 #作者:張凱慶 於命令列執行以上程式,結果如下 $python3static05.py 4 5 $ 相關教學影片 Python類別的類別屬性與類別方法⇨YouTube頁面連結 Python類別的static方法⇨YouTube頁面連結 上一頁:6.4類別屬性與實體屬性 Python速查手冊-目錄 下一頁:6.6封裝 回Python教材首頁 回程式語言教材首頁



請為這篇文章評分?