最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 變量教程私有變量詳解

 更新時(shí)間:2022年08月23日 09:33:39   作者:海擁???????  
這篇文章主要介紹了Python 變量教程私有變量詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

Python 中,不存在只能在對象內(nèi)部訪問的“私有”實(shí)例變量。然而,大多數(shù) Python 代碼和編碼器都遵循一個(gè)約定,即以下劃線為前綴的名稱,例如 _geek應(yīng)被視為 API 或任何 Python 代碼的非公共部分,無論它是函數(shù)還是方法,或數(shù)據(jù)成員。在經(jīng)歷這個(gè)過程時(shí),我們還將嘗試?yán)斫飧鞣N形式的尾隨下劃線的概念,例如,for _ in range(10), init(self)。 

重整及其工作原理

在 Python 中,有一種叫做名稱修飾的東西,這意味著對類私有成員的有效用例的支持有限,基本上是為了避免名稱與子類定義的名稱發(fā)生名稱沖突。__geek 形式的任何標(biāo)識符(至少兩個(gè)前導(dǎo)下劃線或最多一個(gè)尾隨下劃線)都將替換為 _classname__geek,其中 classname 是當(dāng)前類名,前導(dǎo)下劃線被去除。只要它出現(xiàn)在類的定義中,這種修飾就完成了。這有助于讓子類覆蓋方法而不破壞類內(nèi)方法調(diào)用。 
讓我們看一下這個(gè)例子,并嘗試找出這個(gè)下劃線是如何工作的: 

# 說明重整工作原理的 Python 代碼
class Map:
	def __init__(self, iterate):
		self.list = []
		self.__geek(iterate)
	def geek(self, iterate):
		for item in iterate:
			self.list.append(item)

	# 原始 geek() 方法的私有副本
	__geek = geek

class MapSubclass(Map):
	
	# 為 geek() 提供了新的簽名,但不會破壞 __init__()
	def geek(self, key, value):	
		for i in zip(keys, value):
			self.list.append(i)

修改規(guī)則的設(shè)計(jì)主要是為了避免事故,但仍然可以訪問或修改被認(rèn)為是私有的變量。這甚至在特殊情況下很有用,例如在調(diào)試器中。

_單前導(dǎo)下劃線

因此,基本上方法、函數(shù)或數(shù)據(jù)成員開頭的下劃線意味著您不應(yīng)該訪問此方法,因?yàn)樗皇?API 的一部分。

讓我們看一下這段代碼:

# 說明單下劃線如何工作的 Python 代碼
def _get_errors(self):
	if self._errors is None:
		self.full_clean()
	return self._errors

errors = property(_get_errors)

該片段取自 Django 源代碼 (django/forms/forms.py)。這表明錯誤是屬性,也是 API 的一部分,但方法 _get_errors 是“私有的”,因此不應(yīng)訪問它。

__雙前導(dǎo)下劃線

一開始,兩條下劃線引起了很多混亂。這是關(guān)于語法而不是約定。雙下劃線將破壞類的屬性名稱,以避免類之間的屬性名稱沖突。

例如:

# 說明開頭雙下劃線如何工作的 Python 代碼
class Geek:
	def _single_method(self):
		pass
	def __double_method(self): # 用于重整
		pass
class Pyth(Geek):
	def __double_method(self): # 用于重整
		pass

雙前導(dǎo)和雙尾下劃線

還有另一種雙前導(dǎo)和尾隨下劃線的情況。我們在使用特殊變量或方法(稱為“魔術(shù)方法”)時(shí)遵循這一點(diǎn),例如 len、init。這些方法為名稱提供了特殊的句法特征。例如,file 表示 Python 文件的位置,eq 在執(zhí)行 a == b 表達(dá)式時(shí)執(zhí)行。 

例子:

# 說明雙前導(dǎo)和雙尾下劃線工作的 Python 代碼
class Geek:

	# '__init__' 用于初始化,這是一個(gè)特殊的方法
	def __init__(self, ab):
		self.ab = ab

	# 自定義特殊方法。 盡量不要使用它
	def __custom__(self):
		pass

到此這篇關(guān)于Python 變量教程私有變量詳解的文章就介紹到這了,更多相關(guān)Python 私有變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

斗六市| 漳浦县| 东乡| 永和县| 类乌齐县| 瓮安县| 土默特右旗| 包头市| 青神县| 富平县| 长白| 鄂托克旗| 韶关市| 资阳市| 尼木县| 乌鲁木齐县| 如皋市| 神农架林区| 尉犁县| 尼勒克县| 普定县| 弥勒县| 江达县| 施甸县| 林周县| 朝阳县| 原平市| 房产| 城市| 威信县| 行唐县| 渭南市| 凤凰县| 呈贡县| 手游| 舒城县| 武强县| 柳林县| 兴山县| 阜平县| 乌拉特前旗|