一文帶你掌握Python中的雙下劃線(xiàn)寫(xiě)法
基本概念
在 Python 中,雙下劃線(xiàn)--也被稱(chēng)為“dunder”--是一種用于修飾類(lèi)屬性名稱(chēng)或類(lèi)方法名稱(chēng)的行為。當(dāng)開(kāi)發(fā)人員在類(lèi)內(nèi)部的屬性名稱(chēng)或方法名稱(chēng)前加上雙下劃線(xiàn)時(shí),Python 會(huì)對(duì)其進(jìn)行名稱(chēng)修飾。具體的修飾方法是:在屬性名稱(chēng)或方法名稱(chēng)前加上類(lèi)名作為前綴。
舉個(gè)例子,如果我們有一個(gè)名為MyClass
的類(lèi),其中包含一個(gè)名為__my_attribute
的屬性,Python將自動(dòng)將其重命名為_MyClass__my_attribute
。Python 內(nèi)置的這種名稱(chēng)修飾機(jī)制有助于避免類(lèi)之間的屬性名稱(chēng)沖突。
讓我們看一個(gè)例子。
class MyClass: def __init__(self): self.__my_attribute = 42 obj = MyClass() print(obj.__my_attribute) # 這將觸發(fā)一個(gè) AttributeError print(obj._MyClass__my_attribute) # 這行語(yǔ)句將會(huì)運(yùn)行正常
在上面的代碼中,嘗試直接訪(fǎng)問(wèn)obj.__my_attribute
將導(dǎo)致AttributeError,因?yàn)榇嬖诿Q(chēng)修飾。要訪(fǎng)問(wèn)屬性,我們需要使用名稱(chēng)修飾后的名稱(chēng),即obj._MyClass__my_attribute
。
下面讓我們來(lái)詳細(xì)了解一下如何在 Python 中使用雙下劃線(xiàn)。
如何在Python中使用雙下劃線(xiàn)
1.私有屬性
雙下劃線(xiàn)屬性通常用于在類(lèi)內(nèi)部創(chuàng)建私有屬性。雖然 Python 沒(méi)有像某些其他語(yǔ)言那樣的嚴(yán)格訪(fǎng)問(wèn)控制,但這種命名約定可以向其他開(kāi)發(fā)人員發(fā)出信號(hào),表明這些屬性不應(yīng)直接訪(fǎng)問(wèn)。
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
類(lèi)中,__balance
屬性被視為私有屬性,我們使用雙下劃線(xiàn)表示。這可以在某種程度上防止外部直接訪(fǎng)問(wèn)該屬性。
2.避免屬性名稱(chēng)沖突
如前所述,雙下劃線(xiàn)有助于避免類(lèi)之間的屬性名稱(chēng)沖突。這在繼承場(chǎng)景中特別有用。
class Parent: def __init__(self): self.__my_attribute = "父類(lèi)的屬性" class Child(Parent): def __init__(self): super().__init__() self.__my_attribute = "子類(lèi)的屬性" parent_obj = Parent() child_obj = Child() print(parent_obj._Parent___my_attribute) # 輸出“父類(lèi)的屬性” print(child_obj._Child___my_attribute) # 輸出“子類(lèi)的屬性”
通過(guò)使用雙下劃線(xiàn),Child
類(lèi)中的__my_attribute
屬性不會(huì)與Parent
類(lèi)中的屬性沖突。
雖然雙下劃線(xiàn)可以很有用,但我們還應(yīng)該謹(jǐn)慎使用。以下是一些需要盡量遵循的最佳實(shí)踐規(guī)范:
- 避免過(guò)度使用名稱(chēng)修飾: 謹(jǐn)慎使用雙下劃線(xiàn)。過(guò)度使用可能會(huì)使我們的代碼變得不易閱讀和維護(hù)。
- 考慮在大多數(shù)情況下使用單下劃線(xiàn): 對(duì)于大多數(shù)情況下,僅使用單個(gè)前導(dǎo)下劃線(xiàn)即可表示屬性?xún)H供內(nèi)部使用。將雙下劃線(xiàn)保留用于可能發(fā)生名稱(chēng)沖突的情況。
- 文檔化私有屬性: 如果選擇使用雙下劃線(xiàn),請(qǐng)?jiān)陬?lèi)的文檔字符串或注釋中記錄這些私有屬性的用途。
- 使用獲取器和設(shè)置器方法: 當(dāng)封裝很重要時(shí),考慮使用獲取器和設(shè)置器方法來(lái)訪(fǎng)問(wèn)和修改私有屬性。這提供了更好的屬性訪(fǎng)問(wèn)控制,并允許進(jìn)行必要的驗(yàn)證。
總結(jié)
對(duì)開(kāi)發(fā)人員而言,Python 中的雙下劃線(xiàn)是一種很有用的工具,用于修飾屬性名稱(chēng)或方法名稱(chēng),并在類(lèi)內(nèi)部創(chuàng)建私有屬性和私有方法。這種雙下劃線(xiàn)的修飾方式有助于避免名稱(chēng)沖突并改善代碼的組織。
當(dāng)然,我們需要謹(jǐn)慎使用雙下劃線(xiàn),并盡量遵循最佳實(shí)踐規(guī)范,以確保我們的代碼保持可讀性和可維護(hù)性。
到此這篇關(guān)于一文帶你掌握Python中的雙下劃線(xiàn)寫(xiě)法的文章就介紹到這了,更多相關(guān)Python雙下劃線(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 探索Python中雙下劃線(xiàn)的特殊方法屬性魔法世界
- Python下劃線(xiàn)命名模式
- python中單下劃線(xiàn)與雙下劃線(xiàn)的區(qū)別及說(shuō)明
- Python 中下劃線(xiàn)的幾種用法(_、_xx、xx_、__xx、__xx__)
- python中單雙下劃線(xiàn)的區(qū)別對(duì)比分析
- Python中私有屬性“_“下劃線(xiàn)和“__“雙下劃線(xiàn)區(qū)別
- 初學(xué)者快看,Python下劃線(xiàn)的五個(gè)作用介紹
- Python五種下劃線(xiàn)詳解
- python 類(lèi)中函數(shù)名前后加下劃線(xiàn)的具體使用
相關(guān)文章
解決Pytorch半精度浮點(diǎn)型網(wǎng)絡(luò)訓(xùn)練的問(wèn)題
這篇文章主要介紹了解決Pytorch半精度浮點(diǎn)型網(wǎng)絡(luò)訓(xùn)練的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python-opencv在有噪音的情況下提取圖像的輪廓實(shí)例
下面小編就為大家?guī)?lái)一篇python-opencv在有噪音的情況下提取圖像的輪廓實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08詳解超星腳本出現(xiàn)亂碼問(wèn)題的解決方法(Python)
超星助手是一款為孩子們提供學(xué)習(xí)的軟件,支持用戶(hù)們后臺(tái)運(yùn)行多開(kāi)等,還可以簽到,查題等多功能,下面這篇文章主要給大家介紹了關(guān)于超星腳本出現(xiàn)亂碼問(wèn)題的解決方法,需要的朋友可以參考下2022-05-05