Python入門之實(shí)例方法、類方法和靜態(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
# 定義實(shí)例方法(定義時(shí),必須把self作為第一個(gè)參數(shù)),該方法可以訪問實(shí)例變量(屬性)。調(diào)用時(shí)必須通過實(shí)例名來調(diào)用,不能通過類名來調(diào)用
def bark(self):
print(f"{self.name} is barking!")
# 定義類方法(定義時(shí),必須把cls作為第一個(gè)參數(shù))。該方法可以訪問類變量(屬性),可以通過實(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作為第一個(gè)參數(shù))。靜態(tài)方法就是普通的函數(shù),它對(duì)類和實(shí)例都一無所知。
不能訪問類變量,也不能訪問實(shí)例變量??梢酝ㄟ^實(shí)例名來調(diào)用,也可以通過類名來調(diào)用
靜態(tài)方法寫在類外面也是可以的,寫在類里面只是因?yàn)檫@個(gè)函數(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)用實(shí)例方法!")
dog_2 = Dog(name="旺財(cái)", 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)用實(shí)例方法!
旺財(cái) is barking!
共有 52 條狗
狗的重量為: 18
2. 說明
| 名稱 | 裝飾器 | 定義 | 是否可以訪問實(shí)例變量 | 實(shí)例名調(diào)用 | 類名調(diào)用 |
| 實(shí)例方法 | 無 | 必須把self作為第一個(gè)參數(shù) | √ | √ | × |
| 類方法 | @classmethod | 必須把cls作為第一個(gè)參數(shù) | √ | √ | √ |
| 靜態(tài)方法 | @staticmethod | 等價(jià)于普通函數(shù) | × | √ | √ |
3. 注意事項(xiàng)
- 默認(rèn)創(chuàng)建的方法都是實(shí)例方法
- 類方法在創(chuàng)建時(shí)第一個(gè)參數(shù)必須是cls,不能缺省
- 靜態(tài)方法不可以傳入self,會(huì)報(bào)錯(cuò)(因?yàn)殪o態(tài)方法本質(zhì)上就是普通的函數(shù),傳入的self會(huì)被認(rèn)為是一個(gè)形參)!
4. 總結(jié)
總的來說
- 實(shí)例方法適用于需要類的每個(gè)實(shí)例共享的操作;
- 類方法用于需要在不創(chuàng)建類實(shí)例的情況下執(zhí)行操作的情況;
- 而靜態(tài)方法則適用于不需要訪問類或?qū)嵗臄?shù)據(jù)的情況。
要理解這三種方法的區(qū)別和何時(shí)使用它們,是Python類編程的基本技巧之一。
到此這篇關(guān)于Python入門之實(shí)例方法、類方法和靜態(tài)方法的區(qū)別講解的文章就介紹到這了,更多相關(guān)實(shí)例方法、類方法和靜態(tài)方法區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)從文件中加載數(shù)據(jù)的方法詳解
日常工作中有許多類型的文件,以及許多方法,用它們從文件中提取數(shù)據(jù)來圖形化。本文將利用Python實(shí)現(xiàn)從文件中加載數(shù)據(jù),感興趣的可以了解一下2022-04-04
使用Python和PyQt5開發(fā)一個(gè)多功能音樂播放器
在日常開發(fā)中,多媒體應(yīng)用無疑是最常見的需求之一,音樂播放器作為其中的典型代表,不僅要求具備流暢的播放體驗(yàn),還需提供豐富的功能,本文將帶領(lǐng)你一步步學(xué)習(xí)如何使用 Python 和 PyQt5 庫開發(fā)一個(gè)功能全面的音樂播放器,需要的朋友可以參考下2026-01-01
Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析
這篇文章主要介紹了Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
python pandas時(shí)序處理相關(guān)功能詳解
這篇文章主要介紹了python pandas時(shí)序處理相關(guān)功能詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python系統(tǒng)監(jiān)控之跨平臺(tái)檢查系統(tǒng)服務(wù)運(yùn)行狀態(tài)的完整指南
系統(tǒng)服務(wù)是操作系統(tǒng)和應(yīng)用程序正常運(yùn)行的基礎(chǔ),本文將和大家分享一個(gè)系統(tǒng)服務(wù)狀態(tài)檢查的Python實(shí)用腳本,可以跨平臺(tái)檢查系統(tǒng)服務(wù)的運(yùn)行狀態(tài),并提供詳細(xì)的報(bào)告和告警功能,有需要的可以參考下2025-12-12
python接口自動(dòng)化之使用token傳入到header消息頭中
這篇文章主要介紹了python接口自動(dòng)化之使用token傳入到header消息頭中問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
keras實(shí)現(xiàn)多GPU或指定GPU的使用介紹
這篇文章主要介紹了keras實(shí)現(xiàn)多GPU或指定GPU的使用介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06

