一文帶你掌握Python中的雙下劃線寫法
基本概念
在 Python 中,雙下劃線--也被稱為“dunder”--是一種用于修飾類屬性名稱或類方法名稱的行為。當(dāng)開發(fā)人員在類內(nèi)部的屬性名稱或方法名稱前加上雙下劃線時(shí),Python 會(huì)對(duì)其進(jìn)行名稱修飾。具體的修飾方法是:在屬性名稱或方法名稱前加上類名作為前綴。
舉個(gè)例子,如果我們有一個(gè)名為MyClass的類,其中包含一個(gè)名為__my_attribute的屬性,Python將自動(dòng)將其重命名為_MyClass__my_attribute。Python 內(nèi)置的這種名稱修飾機(jī)制有助于避免類之間的屬性名稱沖突。
讓我們看一個(gè)例子。
class MyClass:
def __init__(self):
self.__my_attribute = 42
obj = MyClass()
print(obj.__my_attribute) # 這將觸發(fā)一個(gè) AttributeError
print(obj._MyClass__my_attribute) # 這行語句將會(huì)運(yùn)行正常
在上面的代碼中,嘗試直接訪問obj.__my_attribute將導(dǎo)致AttributeError,因?yàn)榇嬖诿Q修飾。要訪問屬性,我們需要使用名稱修飾后的名稱,即obj._MyClass__my_attribute。
下面讓我們來詳細(xì)了解一下如何在 Python 中使用雙下劃線。
如何在Python中使用雙下劃線
1.私有屬性
雙下劃線屬性通常用于在類內(nèi)部創(chuàng)建私有屬性。雖然 Python 沒有像某些其他語言那樣的嚴(yán)格訪問控制,但這種命名約定可以向其他開發(fā)人員發(fā)出信號(hào),表明這些屬性不應(yīng)直接訪問。
class BankAccount:
def __init__(self, balance=0):
self.__balance = balance
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def withdraw(self, amount):
if amount > 0 and amount <= self.__balance:
self.__balance -= amount
def get_balance(self):
return self.__balance
在BankAccount類中,__balance屬性被視為私有屬性,我們使用雙下劃線表示。這可以在某種程度上防止外部直接訪問該屬性。
2.避免屬性名稱沖突
如前所述,雙下劃線有助于避免類之間的屬性名稱沖突。這在繼承場(chǎng)景中特別有用。
class Parent:
def __init__(self):
self.__my_attribute = "父類的屬性"
class Child(Parent):
def __init__(self):
super().__init__()
self.__my_attribute = "子類的屬性"
parent_obj = Parent()
child_obj = Child()
print(parent_obj._Parent___my_attribute) # 輸出“父類的屬性”
print(child_obj._Child___my_attribute) # 輸出“子類的屬性”
通過使用雙下劃線,Child類中的__my_attribute屬性不會(huì)與Parent類中的屬性沖突。
雖然雙下劃線可以很有用,但我們還應(yīng)該謹(jǐn)慎使用。以下是一些需要盡量遵循的最佳實(shí)踐規(guī)范:
- 避免過度使用名稱修飾: 謹(jǐn)慎使用雙下劃線。過度使用可能會(huì)使我們的代碼變得不易閱讀和維護(hù)。
- 考慮在大多數(shù)情況下使用單下劃線: 對(duì)于大多數(shù)情況下,僅使用單個(gè)前導(dǎo)下劃線即可表示屬性僅供內(nèi)部使用。將雙下劃線保留用于可能發(fā)生名稱沖突的情況。
- 文檔化私有屬性: 如果選擇使用雙下劃線,請(qǐng)?jiān)陬惖奈臋n字符串或注釋中記錄這些私有屬性的用途。
- 使用獲取器和設(shè)置器方法: 當(dāng)封裝很重要時(shí),考慮使用獲取器和設(shè)置器方法來訪問和修改私有屬性。這提供了更好的屬性訪問控制,并允許進(jìn)行必要的驗(yàn)證。
總結(jié)
對(duì)開發(fā)人員而言,Python 中的雙下劃線是一種很有用的工具,用于修飾屬性名稱或方法名稱,并在類內(nèi)部創(chuàng)建私有屬性和私有方法。這種雙下劃線的修飾方式有助于避免名稱沖突并改善代碼的組織。
當(dāng)然,我們需要謹(jǐn)慎使用雙下劃線,并盡量遵循最佳實(shí)踐規(guī)范,以確保我們的代碼保持可讀性和可維護(hù)性。
到此這篇關(guān)于一文帶你掌握Python中的雙下劃線寫法的文章就介紹到這了,更多相關(guān)Python雙下劃線內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 同時(shí)運(yùn)行多個(gè)程序的實(shí)例
今天小編就為大家分享一篇python 同時(shí)運(yùn)行多個(gè)程序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Django使用channels + websocket打造在線聊天室
本文將教你如何使用channels + websocket打造個(gè)在線聊天室。一共只有四步,你可以輕松上手并學(xué)會(huì)。項(xiàng)目中大部分代碼是基于channels的官方文檔的,加入了些自己的理解,以便新手學(xué)習(xí)使用。2021-05-05
Python使用grpc服務(wù)并與C++互相調(diào)用
這篇文章主要為大家詳細(xì)介紹了gRPC的安裝與使用,包括使用pip安裝相關(guān)組件,并和C++互相調(diào)用gRPC服務(wù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-12-12
Python?matplotlib繪制散點(diǎn)圖配置(萬能模板案例)
這篇文章主要介紹了Python?matplotlib繪制散點(diǎn)圖配置(萬能模板案例),散點(diǎn)圖是指在??回歸分析???中,數(shù)據(jù)點(diǎn)在直角坐標(biāo)系平面上的?分布圖???,散點(diǎn)圖表示因變量隨??自變量???而?變化???的大致趨勢(shì),據(jù)此可以選擇合適的函數(shù)??對(duì)數(shù)???據(jù)點(diǎn)進(jìn)行?擬合2022-07-07

