python中類.函數(shù)名(self) 和 self.函數(shù)名()的調(diào)用方式
1. 基本等價(jià)性
class MyClass:
def method(self, x):
return x * 2
obj = MyClass()
# 這兩種調(diào)用方式是等價(jià)的
result1 = obj.method(5) # self.method(5)
result2 = MyClass.method(obj, 5) # 類.方法(self, 5)
print(result1, result2) # 輸出: 10 10
2. 重要區(qū)別
2.1 繼承和多態(tài)
class Parent:
def method(self):
print("Parent method")
class Child(Parent):
def method(self):
print("Child method")
obj = Child()
# 這兩種方式的行為不同
obj.method() # 輸出: "Child method" (動態(tài)綁定)
Parent.method(obj) # 輸出: "Parent method" (靜態(tài)調(diào)用)
2.2 描述符協(xié)議
如果方法被包裝成屬性或有其他描述符行為,兩種方式可能不同:
class MyClass:
@property
def method(self):
return "property method"
def real_method(self):
return "real method"
obj = MyClass()
print(obj.method) # 輸出: "property method" (作為屬性訪問)
print(MyClass.method) # 輸出: <property object> (訪問屬性對象)
3. 使用場景
推薦使用 self.方法名()
1、大多數(shù)情況下
2、支持多態(tài)和繼承
3、代碼更清晰
使用 類.方法名(self) 的情況
1、需要顯式調(diào)用父類方法時
2、需要繞過方法重寫時
3、在某些元編程場景中
class Parent:
def method(self):
print("Parent")
class Child(Parent):
def method(self):
# 先調(diào)用父類方法
Parent.method(self) # 顯式指定類
print("Child")
4. 總結(jié)
| 特性 | self.方法名() | 類.方法名(self) |
|---|---|---|
| 多態(tài)支持 | ? 是 | ? 否 |
| 繼承行為 | 動態(tài)綁定 | 靜態(tài)綁定 |
| 代碼清晰度 | 高 | 低 |
| 使用頻率 | 常用 | 特殊情況 |
到此這篇關(guān)于python中類.函數(shù)名(self) 和 self.函數(shù)名()的調(diào)用方式的文章就介紹到這了,更多相關(guān)python 類.函數(shù)名(self) 和 self.函數(shù)名()調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python腳本實(shí)現(xiàn)查找webshell的方法
這篇文章主要介紹了python腳本實(shí)現(xiàn)查找webshell的方法,是很實(shí)用的一個功能,需要的朋友可以參考下2014-07-07
Python使用Opencv實(shí)現(xiàn)邊緣檢測以及輪廓檢測的實(shí)現(xiàn)
這篇文章主要介紹了Python使用Opencv實(shí)現(xiàn)邊緣檢測以及輪廓檢測的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python實(shí)現(xiàn)學(xué)生管理系統(tǒng)開發(fā)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
下載與當(dāng)前Chrome對應(yīng)的chromedriver.exe(用于python+selenium)
這篇文章主要介紹了下載與當(dāng)前Chrome對應(yīng)的chromedriver.exe(用于python+selenium),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作詳解
這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作,結(jié)合實(shí)例形式分析了flask框架表單登陸消息提示、錯誤模板調(diào)用及異常處理相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
Python基于ssh遠(yuǎn)程連接Mysql數(shù)據(jù)庫操作
這篇文章主要為大家介紹了Python基于ssh遠(yuǎn)程連接Mysql數(shù)據(jù)庫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python編寫車票訂購系統(tǒng)?Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python編寫車票訂購系統(tǒng),Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
haskell實(shí)現(xiàn)多線程服務(wù)器實(shí)例代碼
這篇文章主要介紹了haskell實(shí)現(xiàn)的多線程服務(wù)器,大家參考使用吧2013-11-11
django框架基于queryset和雙下劃線的跨表查詢操作詳解
這篇文章主要介紹了django框架基于queryset和雙下劃線的跨表查詢操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架queryset和雙下劃線的跨表查詢相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12

