国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

Python:__dict__ 詳解

0
分享至

在 Python 中,無論是模塊、類還是對象,都擁有一個(gè)用于存放名稱與值綁定關(guān)系的內(nèi)部字典——__dict__。它不僅是反射(reflection)機(jī)制的核心支點(diǎn),也體現(xiàn)了 Python 語言“命名即綁定”的動態(tài)特性。

要真正理解命名空間的運(yùn)行邏輯、作用域的生命周期、屬性查找的過程,就必須深入理解 __dict__ 的工作方式。

一、__dict__ 的定義與基本作用

__dict__ 是一個(gè)內(nèi)置屬性,用于保存對象可寫屬性的映射關(guān)系。

換言之,它是對象的命名空間存儲容器(namespace storage)。

語法:

object.__dict__

類型:

對于普通實(shí)例對象(instance)與模塊:類型為 dict

對于類對象:為 mappingproxy(只讀映射視圖)

主要功能:

顯示對象當(dāng)前的全部屬性及其對應(yīng)值。

作為反射接口,支持動態(tài)增刪改屬性。

反映命名空間的即時(shí)狀態(tài)。

示例:

# 輸出:{'name': '艾婉婷'}

這意味著對象屬性在底層被記錄在一個(gè)普通字典中。

二、命名空間與生命周期

Python 中的每個(gè)命名空間(namespace)都是一個(gè)映射表,它記錄了名稱與對象的綁定關(guān)系。這些命名空間的存在與消亡,決定了變量的生命周期(lifecycle)。

(1)命名空間的層級

模塊級命名空間:由模塊的 __dict__ 表示。

類級命名空間:由類的 __dict__(mappingproxy)表示。

實(shí)例級命名空間:由實(shí)例對象的 __dict__ 表示。

(2)生命周期特征

模塊的 __dict__ 在模塊導(dǎo)入時(shí)創(chuàng)建,解釋器退出時(shí)銷毀。

類的 __dict__ 在類定義執(zhí)行完畢時(shí)創(chuàng)建,類對象被回收時(shí)銷毀。

實(shí)例的 __dict__ 在對象構(gòu)造(__init__ 調(diào)用)時(shí)生成,__del__ 或引用計(jì)數(shù)歸零時(shí)銷毀。

命名空間的銷毀伴隨字典內(nèi)容的釋放,字典中引用的對象引用計(jì)數(shù)隨之減少。

三、類、實(shí)例與模塊的 __dict__

(1)模塊的 __dict__

保存模塊中定義的所有變量、函數(shù)、類等:

print(math.__dict__.keys())  # 查看 math 模塊命名空間

(2)類的 __dict__

保存類屬性與方法定義,但返回值為 mappingproxy,防止直接修改:

print(A.__dict__)  #

如果想修改類屬性,需通過類對象直接賦值:

A.x = 99

(3)實(shí)例的 __dict__

僅保存實(shí)例自身定義的屬性(而非繼承的):

print(a.__dict__)  # {'y': 123}

四、動態(tài)反射與運(yùn)行時(shí)修改

__dict__ 的一個(gè)強(qiáng)大用途是動態(tài)反射,它允許我們在運(yùn)行時(shí)讀取、修改對象屬性,而無需提前定義。

print(cfg.version)  # 輸出:1.0

這種機(jī)制在框架(如 Django、Flask)和元編程中非常常見。例如 ORM 模型會根據(jù)數(shù)據(jù)庫字段動態(tài)生成類屬性。

注意:

直接修改 __dict__ 雖然可行,但在復(fù)雜對象中(如使用 __slots__ 或 C 擴(kuò)展類型)可能被禁用。

五、__dict__ 與屬性查找機(jī)制

對象屬性訪問的底層邏輯可簡化為:

1、優(yōu)先查找實(shí)例 __dict__。

2、若不存在,則向類 __dict__ 查找。

3、若仍未找到,則沿繼承鏈(MRO)繼續(xù)上溯。

print(c.x)  

查找路徑(邏輯順序):

c.__dict__ → Child.__dict__ → Base.__dict__

這種層級式查找正是 Python 動態(tài)綁定的基礎(chǔ)。

六、生命周期與內(nèi)存管理的隱含邏輯

理解 __dict__ 的生命周期,可以更好地掌握 Python 對象的內(nèi)存行為。

(1)命名綁定與引用計(jì)數(shù)

每一次名稱綁定都會在 __dict__ 中記錄一條引用。

當(dāng)名稱解除綁定(del 或命名空間銷毀)時(shí),引用計(jì)數(shù)減 1。

(2)命名空間銷毀

當(dāng)命名空間(模塊、類、對象)被釋放時(shí),其 __dict__ 同步銷毀。

若其中的對象仍有外部引用,則其生命周期繼續(xù)。

(3)循環(huán)引用

若 __dict__ 中對象互相引用,Python 的垃圾回收器(gc 模塊)會檢測并清理。

示例:

gc.collect()  # 強(qiáng)制回收循環(huán)引用對象

七、注意事項(xiàng)與最佳實(shí)踐

(1)與其他機(jī)制的關(guān)系


(2)不要在普通業(yè)務(wù)邏輯中頻繁直接操作 __dict__。

(3)若需要動態(tài)注入屬性,應(yīng)使用 setattr() / getattr()。

(4)避免修改類的 __dict__,可通過類定義或裝飾器管理。

(5)若追求性能或內(nèi)存控制,可考慮 __slots__ 機(jī)制。

小結(jié)

__dict__ 是 Python 對象體系的核心結(jié)構(gòu)之一,它既是命名空間的載體,也是動態(tài)語言反射機(jī)制的根基。

通過理解 __dict__,我們就能理解:

命名綁定如何發(fā)生。

屬性如何查找。

對象如何隨命名空間生命周期而消亡。

__dict__ 是對象存在的“記憶體”,記錄了 Python 世界中每一個(gè)名稱的來龍去脈。理解 __dict__ 是掌握 Python 對象模型和動態(tài)特性的基礎(chǔ)。

點(diǎn)贊有美意,贊賞是鼓勵

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
重磅!取得這些職業(yè)資格證書,每年可享受3600元個(gè)稅扣除!

重磅!取得這些職業(yè)資格證書,每年可享受3600元個(gè)稅扣除!

會計(jì)人
2026-01-13 12:11:22
唏噓?皇馬僅花20分鐘解雇阿隆索!老佛爺飛機(jī)上拍板 賠5個(gè)月薪水

唏噓?皇馬僅花20分鐘解雇阿隆索!老佛爺飛機(jī)上拍板 賠5個(gè)月薪水

我愛英超
2026-01-13 08:50:02
馬斯克:現(xiàn)在學(xué)醫(yī)毫無意義,錢很快消失,將發(fā)射8000顆太陽能衛(wèi)星

馬斯克:現(xiàn)在學(xué)醫(yī)毫無意義,錢很快消失,將發(fā)射8000顆太陽能衛(wèi)星

影像溫度
2026-01-13 09:12:41
梅德韋杰夫調(diào)侃:美國再不抓緊,格陵蘭就要入俄了 捍衛(wèi)格陵蘭,歐盟北約還能做些啥?

梅德韋杰夫調(diào)侃:美國再不抓緊,格陵蘭就要入俄了 捍衛(wèi)格陵蘭,歐盟北約還能做些啥?

紅星新聞
2026-01-13 13:34:29
網(wǎng)傳“骨科神醫(yī)”家藏3.2億現(xiàn)金,全被凍結(jié)!

網(wǎng)傳“骨科神醫(yī)”家藏3.2億現(xiàn)金,全被凍結(jié)!

達(dá)文西看世界
2026-01-10 14:18:58
上海明天將飆至20℃!下周大降溫+雨雪!周四起有空氣污染,注意防護(hù)

上海明天將飆至20℃!下周大降溫+雨雪!周四起有空氣污染,注意防護(hù)

魯中晨報(bào)
2026-01-13 20:25:03
國產(chǎn)車企警惕!特斯拉FSD即將入華,技術(shù)代差恐進(jìn)一步拉大

國產(chǎn)車企警惕!特斯拉FSD即將入華,技術(shù)代差恐進(jìn)一步拉大

燕梳樓頻道
2026-01-12 21:14:25
日本米價(jià)再創(chuàng)新高,每公斤38.8元,民眾不得已把主食改為面條

日本米價(jià)再創(chuàng)新高,每公斤38.8元,民眾不得已把主食改為面條

極目新聞
2026-01-13 10:19:55
歲末年初,車企大佬成地方主政官員“香餑餑”

歲末年初,車企大佬成地方主政官員“香餑餑”

一見財(cái)經(jīng)
2026-01-13 18:40:26
14年后,再看“京城四少”的現(xiàn)狀,才明白娶一個(gè)好老婆有多重要

14年后,再看“京城四少”的現(xiàn)狀,才明白娶一個(gè)好老婆有多重要

豐譚筆錄
2026-01-13 07:20:11
一部灣灣電影,扯下內(nèi)娛最后的遮羞布!

一部灣灣電影,扯下內(nèi)娛最后的遮羞布!

編劇藍(lán)羽生
2026-01-13 15:46:04
蒙古99%反華、1%更反華”,蒙古人對中國的看法……

蒙古99%反華、1%更反華”,蒙古人對中國的看法……

百態(tài)人間
2026-01-12 16:29:26
NVIDIA DGX Spark實(shí)現(xiàn)本地千億級參數(shù)模型推理

NVIDIA DGX Spark實(shí)現(xiàn)本地千億級參數(shù)模型推理

至頂頭條
2026-01-13 19:00:38
上任7個(gè)月被炒!44歲阿隆索回應(yīng)佛爺: 我已傾盡所有 可自豪離開

上任7個(gè)月被炒!44歲阿隆索回應(yīng)佛爺: 我已傾盡所有 可自豪離開

風(fēng)過鄉(xiāng)
2026-01-13 19:19:51
青海獨(dú)家回應(yīng):4名評標(biāo)專家“餓暈”當(dāng)天經(jīng)歷了什么

青海獨(dú)家回應(yīng):4名評標(biāo)專家“餓暈”當(dāng)天經(jīng)歷了什么

中國新聞周刊
2026-01-13 18:25:10
合川殺豬飯剛結(jié)束,榜一大哥坐不住了,上門邀請呆呆參加公司活動

合川殺豬飯剛結(jié)束,榜一大哥坐不住了,上門邀請呆呆參加公司活動

天天熱點(diǎn)見聞
2026-01-13 12:31:28
巴薩官宣冬窗首簽!31歲飛翼時(shí)隔1年半回歸 400萬租半賽季+穿2號

巴薩官宣冬窗首簽!31歲飛翼時(shí)隔1年半回歸 400萬租半賽季+穿2號

我愛英超
2026-01-13 20:47:38
前一天促銷,后一天閉店!記者調(diào)查“洗臉熊”門店跑路背后:明星代言難掩預(yù)付卡監(jiān)管“黑洞”

前一天促銷,后一天閉店!記者調(diào)查“洗臉熊”門店跑路背后:明星代言難掩預(yù)付卡監(jiān)管“黑洞”

華夏時(shí)報(bào)
2026-01-13 19:50:05
柬埔寨街頭“狗籠運(yùn)活人”視頻瘋傳,警方:與人口販運(yùn)無關(guān)

柬埔寨街頭“狗籠運(yùn)活人”視頻瘋傳,警方:與人口販運(yùn)無關(guān)

紅星新聞
2026-01-13 13:34:29
回顧許家印被抓捕現(xiàn)場,奮力反抗,怒吼不已,被抓捕人員抬出去

回顧許家印被抓捕現(xiàn)場,奮力反抗,怒吼不已,被抓捕人員抬出去

干史人
2026-01-08 22:47:00
2026-01-13 21:31:00
MediaTea
MediaTea
專業(yè)的數(shù)字媒體、新媒體技術(shù)
1704文章數(shù) 72關(guān)注度
往期回顧 全部

科技要聞

每年10億美元!谷歌大模型注入Siri

頭條要聞

蔣超良被商人滲透式"圍獵":對方拿60萬給其保姆買房

頭條要聞

蔣超良被商人滲透式"圍獵":對方拿60萬給其保姆買房

體育要聞

他帶出國乒世界冠軍,退休后為愛徒返場

娛樂要聞

周杰倫以球員身份參加澳網(wǎng),C位海報(bào)公開

財(cái)經(jīng)要聞

"天量存款"將到期 資金會否搬入股市?

汽車要聞

限時(shí)9.99萬元起 2026款啟辰大V DD-i虎鯨上市

態(tài)度原創(chuàng)

家居
數(shù)碼
親子
旅游
軍事航空

家居要聞

現(xiàn)代簡逸 尋找生活的光

數(shù)碼要聞

MARSHALL 推出馬年新春限定藝術(shù)家合作款:脫韁野馬 自由開聲

親子要聞

每5個(gè)孩子就有1個(gè)“小胖墩”,專家呼吁關(guān)注兒童體重管理

旅游要聞

寶山:薄霧輕籠,水汽氤氳,探尋顧村公園的冬日“秘境”

軍事要聞

美媒:美對伊朗行動選項(xiàng)"遠(yuǎn)超傳統(tǒng)空襲"

無障礙瀏覽 進(jìn)入關(guān)懷版