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

