自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 中的單下劃線和雙下劃線

開發(fā) 前端
通過(guò)使用前導(dǎo)雙下劃線,以確保類的某些屬性或方法只能從類本身內(nèi)部訪問(wèn)。這有助于防止意外修改重要的內(nèi)部數(shù)據(jù),并使代碼更加可靠和可維護(hù)。

哈嘍大家好,我是咸魚。

當(dāng)我們?cè)趯W(xué)習(xí) Python 的時(shí)候,可能會(huì)經(jīng)常遇到單下劃線 _  和雙下劃線 __ 這兩種命名方式。

單下劃線 _  和雙下劃線 __ 不僅僅是只是一種簡(jiǎn)單的命名習(xí)慣,它們?cè)?Python 中有著特殊的含義,對(duì)于代碼的可讀性和功能實(shí)現(xiàn)有著關(guān)鍵的作用。

那么今天我們來(lái)看一看在 Python 中單下劃線和雙下劃線的用法和意義。

前導(dǎo)單下劃線

前導(dǎo)單下劃線(Leading Single Underscore)通常用于命名變量、方法和屬性,表示這些命名的元素是【私有】的或者說(shuō)是【內(nèi)部使用】的。

這種命名約定并不是嚴(yán)格的語(yǔ)言規(guī)則(即非強(qiáng)制性),而是一種約定,告訴開發(fā)人員該對(duì)象不應(yīng)該被外部直接訪問(wèn)或修改

圖片圖片

比如說(shuō)下面的例子中,_internal_var和_internal_method都以前導(dǎo)單下劃線開頭,表示它們是類的內(nèi)部使用。

而public_method是公共方法,可以在類外部訪問(wèn)。

圖片圖片

雖然可以在類外部訪問(wèn)前導(dǎo)單下劃線命名的變量和方法,但是按照約定,建議只在類內(nèi)部使用,而避免在類外部直接訪問(wèn)它們。

單下劃線

單下劃線通常用作一個(gè)占位符,用于表示一個(gè)不重要的變量名或迭代中的臨時(shí)變量,即在解構(gòu)賦值或循環(huán)迭代中不需要使用的變量

例子一中,_ 用作一個(gè)占位符變量,表示在tuple_returning_function()返回的元組中的某個(gè)值,但是在解構(gòu)賦值中沒(méi)有被使用。

圖片圖片

例子二中,_ 用作循環(huán)迭代中的占位符,因?yàn)檠h(huán)體中不需要使用循環(huán)變量的值,只是執(zhí)行了三次打印操作

圖片圖片

單后綴下劃線

單個(gè)后綴下劃線(Single trailing underscores)通常用于避免與 Python 關(guān)鍵字產(chǎn)生命名沖突。它被用作標(biāo)識(shí)符的后綴,以示與Python關(guān)鍵字有所區(qū)別。

比如說(shuō)我想使用一個(gè)在 Python 中已經(jīng)是保留關(guān)鍵字的變量名時(shí),比如class、def、type等。為了避免沖突,可以添加后綴下劃線。

圖片圖片

Dunder 方法

Dunder 方法指的是以雙下劃線(__)開頭和結(jié)尾的特殊方法(也稱為魔術(shù)方法或特殊方法)。

這些方法具有特殊的行為,可以在自定義類中重寫以改變類的行為。Dunder方法的名稱是Python中預(yù)定義的,例如__init__、__str__、__repr__等。

下面是一些常見的 Dunder 方法:

  1. __init__(self, ...): 初始化方法,在對(duì)象實(shí)例化時(shí)調(diào)用,用于初始化對(duì)象的屬性。
  2. __str__(self): 將對(duì)象轉(zhuǎn)換為字符串表示形式,當(dāng)使用print()函數(shù)或str()函數(shù)時(shí)調(diào)用。
  3. __repr__(self): 返回一個(gè)包含對(duì)象信息的字符串,通常用于開發(fā)和調(diào)試,可通過(guò)repr()函數(shù)調(diào)用。
  4. __len__(self): 返回對(duì)象的長(zhǎng)度,通過(guò)len()函數(shù)調(diào)用。
  5. __getitem__(self, key): 獲取對(duì)象的元素,用于索引操作,例如obj[key]。
  6. __setitem__(self, key, value): 設(shè)置對(duì)象的元素,用于索引賦值操作,例如obj[key] = value。
  7. __delitem__(self, key): 刪除對(duì)象的元素,用于索引刪除操作,例如del obj[key]。
  8. __call__(self, ...): 將對(duì)象作為函數(shù)調(diào)用,使得對(duì)象實(shí)例可調(diào)用。

我們?cè)谙旅娴睦又卸x了 __add__  dunder 方法,并創(chuàng)建了兩個(gè)實(shí)例

圖片圖片

我們定義了一個(gè) Point 類,它有 x、y 兩個(gè)實(shí)例變量以及__add__ 方法和__str__ 方法

當(dāng)我們使用 + 運(yùn)算符對(duì) Point 的兩個(gè)實(shí)例(p1、p2)求和時(shí),__add__ 會(huì)自動(dòng)調(diào)用。它返回一個(gè)新 的 Point 對(duì)象(p3),其 x 和 y 值是兩個(gè)原始 Point對(duì)象的 x和 y 值的和

當(dāng)使用print()函數(shù)時(shí)調(diào)用自定義的__str__ 方法

前導(dǎo)雙下劃線

前導(dǎo)雙下劃線作為前綴在對(duì)象名前使用時(shí),表示這是一個(gè)特殊的命名約定,它在類定義中用于創(chuàng)建私有屬性或方法。

當(dāng)在類中使用雙下劃線作為前綴時(shí),Python 解釋器會(huì)自動(dòng)修改屬性名,以避免在子類中發(fā)生命名沖突。這個(gè)過(guò)程被稱為名稱修飾(name mangling)

比如下面這個(gè)例子:

圖片圖片

__private_var屬性在類內(nèi)部被訪問(wèn),但是在類外部直接訪問(wèn)會(huì)導(dǎo)致 AttributeError錯(cuò)誤。

這是因?yàn)?Python 對(duì) __private_var 進(jìn)行了名稱修飾,實(shí)際名稱變成了 obj._MyClass__private_var,這樣避免了外部直接訪問(wèn)

但是我們可以通過(guò)調(diào)用類內(nèi)部方法 get_private_var() 在類外部訪問(wèn)私有屬性。

通過(guò)使用前導(dǎo)雙下劃線,以確保類的某些屬性或方法只能從類本身內(nèi)部訪問(wèn)。這有助于防止意外修改重要的內(nèi)部數(shù)據(jù),并使代碼更加可靠和可維護(hù)

但如果你知道修飾后的名稱,你仍可以在類外部去訪問(wèn)

責(zé)任編輯:武曉燕 來(lái)源: 咸魚運(yùn)維雜談
相關(guān)推薦

2021-08-08 22:27:13

Python下劃線方法

2023-11-09 08:55:17

Python雙下劃線

2010-03-04 10:35:51

Python下劃線

2024-08-20 16:32:37

python接口自動(dòng)化

2021-07-31 19:21:34

Python下劃線數(shù)值

2021-12-26 22:55:26

Python下劃線編程

2020-09-22 09:41:48

Python下劃線開發(fā)

2024-08-16 22:00:38

2013-07-24 19:27:45

iOS開發(fā)學(xué)習(xí)自定義帶下劃線文本UI

2014-05-08 10:36:59

CSS單詞連字符

2020-10-24 11:09:35

Python下劃線用法

2010-01-20 14:13:33

C++變量

2021-10-20 07:36:03

Python構(gòu)造方法

2024-09-26 10:44:53

MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)

2023-11-30 08:21:33

2009-07-10 14:58:13

JLabel組件JFC和Swing

2022-12-19 15:12:34

python運(yùn)算符

2015-07-22 17:21:34

Oracle數(shù)據(jù)字典

2016-10-27 15:58:35

魔術(shù)方法PHP

2019-08-09 09:35:20

JavaScript程序員函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)