python呼叫方法必須例項化麼
python類中的例項方法和靜態方法,在呼叫時,是有區別的。靜態方法可以直接被呼叫,而不需要被例項化。
類方法和靜態方法的區別在於,Python會自動繫結類方法的第一個引數,類方法的第一個引數(通常建議引數名為 cls)會自動繫結到類本身;但對於靜態方法則不會自動繫結。
使用 @classmethod 修飾的方法就是類方法;使用 @staticmethod 修飾的方法就是靜態方法。
下面程式碼示範了定義類方法和靜態方法:
class Bird: # classmethod修飾的方法是類方法 @classmethod def fly (cls): print('類方法fly: ', cls) # staticmethod修飾的方法是靜態方法 @staticmethod def info (p): print('靜態方法info: ', p) # 呼叫類方法,Bird類會自動繫結到第一個引數 Bird.fly() #① # 呼叫靜態方法,不會自動繫結,因此程式必須手動繫結第一個引數 Bird.info('crazyit') # 建立Bird物件 b = Bird() # 使用物件呼叫fly()類方法,其實依然還是使用類呼叫, # 因此第一個引數依然被自動繫結到Bird類 b.fly() #② # 使用物件呼叫info()靜態方法,其實依然還是使用類呼叫, # 因此程式必須為第一個引數執行繫結 b.info('fkit')
推薦學習《》
從上面粗體字程式碼可以看出,使用 @classmethod 修飾的方法是類方法,該類方法定義了一個 cls 引數,該引數會被自動繫結到 Bird 類本身,不管程式是使用類還是物件呼叫該方法,Python 始終都會將類方法的第一個引數繫結到類本身,如 ① 號、② 號程式碼的執行效果。
上面程式還使用 @staticmethod 定義了一個靜態方法,程式同樣既可使用類呼叫靜態方法,也可使用物件呼叫靜態方法,不管用哪種方式呼叫,Python 都不會為靜態方法執行自動繫結。
在使用 Python 程式設計時,一般不需要使用類方法或靜態方法,程式完全可以使用函式來代替類方法或靜態方法。但是在特殊的場景(比如使用工廠模式)下,類方法或靜態方法也是不錯的選擇。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2835223/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python使用ctypes呼叫擴充套件模組的例項方法Python套件
- php例項化物件的例項方法PHP物件
- Python中類方法和例項方法有什麼區別?Python
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- 一個例項中,多個synchronized方法的呼叫synchronized
- python例項方法中self的作用Python
- bean例項化的三種方法Bean
- python類例項化如何實現Python
- 必須讓你一看就能明白系列之———JavaScript 中 new 例項化物件的實現原理?JavaScript物件
- 款項為什麼必須走財務審批流程
- python中類的建立和例項化Python
- 【Python】Python方法求水仙花數原碼例項Python
- python繼承和重寫init方法--例項Python繼承
- python中time庫的例項使用方法Python
- python必須安裝pip嗎Python
- python socket例項Python
- python例項1Python
- 初學Python過程中,例項方法和類方法的區別是什麼?Python
- python--介面自動化鑑權例項Python
- Python中類建立和例項化過程Python
- Java介面為什麼不能例項化Java
- 例項化list
- 為什麼Java的main方法必須是public static void?JavaAI
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- 什麼是字串?Python中字串必須加引號嗎?字串Python
- 核心必須懂(一):用系統呼叫列印Hello,world!
- Python例項集錦Python
- python鬧鐘例項Python
- python100例項Python
- python 類和例項Python
- 網頁版微信介面呼叫例項網頁
- CouchBase C 客戶端介面呼叫例項客戶端
- 理解Python中的類物件、例項物件、屬性、方法Python物件
- python例項屬性的顯示方法-dir、__dict__Python
- GO和Python有什麼區別?這十點必須知道!GoPython
- Laravel kernel例項化Laravel
- 開始例項化
- Java--例項化Java