python下劃線開頭函數(shù)總結(jié)示例詳解
在Python中,以雙下劃線 __
開頭的函數(shù)(或變量)具有特殊的命名含義,主要用于實(shí)現(xiàn)類的私有成員、魔法方法(特殊方法)和名稱修飾(Name Mangling)機(jī)制。下面詳細(xì)解釋這三種情況:
1. 魔法方法(特殊方法)
以雙下劃線開頭并結(jié)尾的方法(如 __init__
、__str__
)稱為魔法方法(Magic Methods)或特殊方法(Special Methods)。這些方法由Python解釋器自動調(diào)用,用于實(shí)現(xiàn)類的內(nèi)置行為。
常見魔法方法示例
class MyClass: def __init__(self, value): # 構(gòu)造函數(shù),創(chuàng)建對象時(shí)自動調(diào)用 self.value = value def __str__(self): # 對象轉(zhuǎn)字符串時(shí)調(diào)用(如print()) return f"MyClass(value={self.value})" def __add__(self, other): # 定義加法操作(如obj1 + obj2) return MyClass(self.value + other.value) def __len__(self): # 定義長度(如len(obj)) return 1
調(diào)用示例
a = MyClass(10) b = MyClass(20) print(a + b) # 自動調(diào)用 __add__ 和 __str__ print(len(a)) # 自動調(diào)用 __len__
2. 私有方法和屬性(名稱修飾)
以雙下劃線開頭但不以雙下劃線結(jié)尾的方法(如 __private_method
)是類的私有成員,通過名稱修飾(Name Mangling)機(jī)制實(shí)現(xiàn)一定程度的訪問限制。
名稱修飾規(guī)則
Python會將類中的 __private_method
重命名為 _類名__private_method
,使得該方法在類外部難以直接訪問,但并非完全禁止。
示例代碼
class MyClass: def __public_method(self): print("這是公開方法") def __private_method(self): print("這是私有方法") def call_private(self): self.__private_method() # 類內(nèi)部可以正常調(diào)用 obj = MyClass() obj.__public_method() # 正常調(diào)用 # obj.__private_method() # 報(bào)錯(cuò):AttributeError obj._MyClass__private_method() # 可以訪問,但不推薦(違反封裝原則)
3. 與單下劃線_的區(qū)別
- 單下劃線
_method
:約定俗成的弱私有成員,僅作為開發(fā)者之間的約定,外部仍可訪問。 - 雙下劃線
__method
:通過名稱修飾實(shí)現(xiàn)的強(qiáng)私有成員,外部訪問需通過_類名__method
。
示例對比
class MyClass: def _single_underscore(self): print("單下劃線方法") def __double_underscore(self): print("雙下劃線方法") obj = MyClass() obj._single_underscore() # 可以正常調(diào)用(約定不調(diào)用) obj._MyClass__double_underscore() # 可以調(diào)用(但破壞封裝)
4. 使用場景建議
- 魔法方法:用于實(shí)現(xiàn)類的特殊行為,如運(yùn)算符重載、對象創(chuàng)建和銷毀等。
- 私有方法:用于隱藏類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),避免外部直接調(diào)用(但需注意并非絕對安全)。
- 單下劃線:用于模塊級的私有成員(導(dǎo)入時(shí)
from module import *
不會導(dǎo)入)或內(nèi)部臨時(shí)變量。
總結(jié)
命名方式 | 含義 | 示例 |
---|---|---|
__method__ | 魔法方法,Python內(nèi)置行為 | __init__ , __add__ |
__method | 私有方法,通過名稱修飾實(shí)現(xiàn)封裝 | __private_method |
_method | 弱私有,約定不被外部直接訪問 | _helper_method |
雙下劃線命名是Python實(shí)現(xiàn)封裝和特殊行為的重要機(jī)制,合理使用可以提高代碼的可讀性和可維護(hù)性。
到此這篇關(guān)于python下劃線開頭函數(shù)總結(jié)的文章就介紹到這了,更多相關(guān)python下劃線開頭函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python matploblib庫繪制準(zhǔn)確率,損失率折線圖
這篇文章主要介紹了使用python matploblib庫繪制準(zhǔn)確率,損失率折線圖,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python 的 scapy庫,實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子
今天小編就為大家分享一篇python 的 scapy庫,實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07解決Python報(bào)錯(cuò):PermissionError: [Errno 13] Permis
PermissionError是Python內(nèi)置異常的一部分,它在試圖訪問或修改文件系統(tǒng)中的文件或目錄而沒有適當(dāng)權(quán)限時(shí)發(fā)生,具有一定的參考價(jià)值,感興趣的可以了解一下2025-05-05Python?的counter()函數(shù)解析與示例詳解
在?Python?中,?collections?模塊提供了?Counter?類,用于計(jì)算可迭代對象中元素的數(shù)量,?Counter?是一個(gè)字典的子類,它以元素作為鍵,以元素出現(xiàn)的次數(shù)作為值進(jìn)行計(jì)數(shù),本文給大家介紹Python?的counter()函數(shù),感興趣的朋友一起看看吧2023-08-08