Python入門之實例方法、類方法和靜態(tài)方法的區(qū)別講解
1. 例子
class Dog: # 定義類變量(類屬性) dogbook = {"黃色": 30, "黑色": 20, "白色": 0} def __init__(self, name, color, weight) -> None: self.name = name self.color = color self.weight = weight if self.color in self.dogbook: self.dogbook[self.color] += 1 else: self.dogbook[self.color] = 1 # 定義實例方法(定義時,必須把self作為第一個參數(shù)),該方法可以訪問實例變量(屬性)。調(diào)用時必須通過實例名來調(diào)用,不能通過類名來調(diào)用 def bark(self): print(f"{self.name} is barking!") # 定義類方法(定義時,必須把cls作為第一個參數(shù))。該方法可以訪問類變量(屬性),可以通過實例名來調(diào)用,也可以通過類名來調(diào)用 @classmethod def dog_num(cls): num = 0 for val in cls.dogbook.values(): num += val return num """ 定義靜態(tài)方法(定義式,不需要把self和cls作為第一個參數(shù))。靜態(tài)方法就是普通的函數(shù),它對類和實例都一無所知。 不能訪問類變量,也不能訪問實例變量??梢酝ㄟ^實例名來調(diào)用,也可以通過類名來調(diào)用 靜態(tài)方法寫在類外面也是可以的,寫在類里面只是因為這個函數(shù)和類有一定的關(guān)系,邏輯上更加易懂! """ @staticmethod def total_weights(形參): total = 0 for val in 形參: total += val.weight return total if __name__ == "__main__": print(f"共有 {Dog.dog_num()} 條狗") dog_1 = Dog(name="大黃", color="黃色", weight=10) dog_1.bark() print(f"共有 {Dog.dog_num()} 條狗") try: Dog.bark() except: print("不能通過類名調(diào)用實例方法!") dog_2 = Dog(name="旺財", color="灰色", weight=8) dog_2.bark() print(f"共有 {Dog.dog_num()} 條狗") print(f"狗的重量為: {Dog.total_weights(形參=[dog_1, dog_2])}")
運(yùn)行結(jié)果:
共有 50 條狗
大黃 is barking!
共有 51 條狗
不能通過類名調(diào)用實例方法!
旺財 is barking!
共有 52 條狗
狗的重量為: 18
2. 說明
名稱 | 裝飾器 | 定義 | 是否可以訪問實例變量 | 實例名調(diào)用 | 類名調(diào)用 |
實例方法 | 無 | 必須把self作為第一個參數(shù) | √ | √ | × |
類方法 | @classmethod | 必須把cls作為第一個參數(shù) | √ | √ | √ |
靜態(tài)方法 | @staticmethod | 等價于普通函數(shù) | × | √ | √ |
3. 注意事項
- 默認(rèn)創(chuàng)建的方法都是實例方法
- 類方法在創(chuàng)建時第一個參數(shù)必須是cls,不能缺省
- 靜態(tài)方法不可以傳入self,會報錯(因為靜態(tài)方法本質(zhì)上就是普通的函數(shù),傳入的self會被認(rèn)為是一個形參)!
4. 總結(jié)
總的來說
- 實例方法適用于需要類的每個實例共享的操作;
- 類方法用于需要在不創(chuàng)建類實例的情況下執(zhí)行操作的情況;
- 而靜態(tài)方法則適用于不需要訪問類或?qū)嵗臄?shù)據(jù)的情況。
要理解這三種方法的區(qū)別和何時使用它們,是Python類編程的基本技巧之一。
到此這篇關(guān)于Python入門之實例方法、類方法和靜態(tài)方法的區(qū)別講解的文章就介紹到這了,更多相關(guān)實例方法、類方法和靜態(tài)方法區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django模板導(dǎo)入母版繼承和自定義返回Html片段過程解析
這篇文章主要介紹了Django模板導(dǎo)入母版繼承和自定義返回Html片段過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09Python連接mysql數(shù)據(jù)庫的正確姿勢
這篇文章主要為大家詳細(xì)介紹了Python連接mysql數(shù)據(jù)庫的正確姿勢,如何使用Python連接mysql數(shù)據(jù)庫,本文為大家揭曉,感興趣的小伙伴們可以參考一下2016-02-02Python中使用Opencv開發(fā)停車位計數(shù)器功能
這篇文章主要介紹了Python中使用Opencv開發(fā)停車位計數(shù)器,本教程最好的一點就是我們將使用基本的圖像處理技術(shù)來解決這個問題,沒有使用機(jī)器學(xué)習(xí)、深度學(xué)習(xí)進(jìn)行訓(xùn)練來識別,感興趣的朋友跟隨小編一起看看吧2022-04-04pytorch加載自定義網(wǎng)絡(luò)權(quán)重的實現(xiàn)
今天小編就為大家分享一篇pytorch加載自定義網(wǎng)絡(luò)權(quán)重的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python?encode()方法和decode()方法詳解
encode() 方法為字符串類型(str)提供的方法,用于將 str 類型轉(zhuǎn)換成 bytes 類型,這個過程也稱為“編碼”,這篇文章主要介紹了Python?encode()方法和decode()方法,需要的朋友可以參考下2022-12-12selenium+python自動化78-autoit參數(shù)化與批量上傳功能的實現(xiàn)
這篇文章主要介紹了selenium+python自動化78-autoit參數(shù)化與批量上傳,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03python批量實現(xiàn)Word文件轉(zhuǎn)換為PDF文件
這篇文章主要為大家詳細(xì)介紹了python批量實現(xiàn)Word文件轉(zhuǎn)換為PDF文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03Python生成隨機(jī)數(shù)組的方法小結(jié)
這篇文章主要介紹了Python生成隨機(jī)數(shù)組的方法,結(jié)合實例形式總結(jié)分析了Python使用random模塊生成隨機(jī)數(shù)與數(shù)組操作相關(guān)技巧,需要的朋友可以參考下2017-04-04