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

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

Python:__dict__ 詳解

0
分享至

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

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

一、__dict__ 的定義與基本作用

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

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

語法:

object.__dict__

類型:

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

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

主要功能:

顯示對象當前的全部屬性及其對應值。

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

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

示例:

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

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

二、命名空間與生命周期

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

(1)命名空間的層級

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

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

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

(2)生命周期特征

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

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

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

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

三、類、實例與模塊的 __dict__

(1)模塊的 __dict__

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

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

(2)類的 __dict__

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

print(A.__dict__)  #

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

A.x = 99

(3)實例的 __dict__

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

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

四、動態(tài)反射與運行時修改

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

print(cfg.version)  # 輸出:1.0

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

注意:

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

五、__dict__ 與屬性查找機制

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

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

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

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

print(c.x)  

查找路徑(邏輯順序):

c.__dict__ → Child.__dict__ → Base.__dict__

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

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

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

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

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

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

(2)命名空間銷毀

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

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

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

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

示例:

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

七、注意事項與最佳實踐

(1)與其他機制的關系


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

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

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

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

小結

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

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

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

屬性如何查找。

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

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

點贊有美意,贊賞是鼓勵

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

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.

相關推薦
熱點推薦
合川殺豬宴后續(xù):30桌流水席堵爆村道,文旅連夜救場,現(xiàn)扎心一幕

合川殺豬宴后續(xù):30桌流水席堵爆村道,文旅連夜救場,現(xiàn)扎心一幕

史行途
2026-01-12 11:34:55
中方廣發(fā)邀請?zhí)?,多國積極派兵,1國拒絕派兵,金磚內(nèi)部冒出刺頭

中方廣發(fā)邀請?zhí)鄧e極派兵,1國拒絕派兵,金磚內(nèi)部冒出刺頭

時時有聊
2026-01-11 19:26:09
海爾智家2025半年報出爐!利潤120.33億元,業(yè)績超預期

海爾智家2025半年報出爐!利潤120.33億元,業(yè)績超預期

投資時間網(wǎng)
2025-08-28 21:32:19
網(wǎng)約車的戾氣已經(jīng)到什么程度了:司機奉勸乘客少說話,不然容易出事

網(wǎng)約車的戾氣已經(jīng)到什么程度了:司機奉勸乘客少說話,不然容易出事

六子吃涼粉
2026-01-12 08:42:18
合川殺豬宴僅2天,惡心事接連發(fā)生!多人砸場子,坑慘當?shù)匚穆?>
    </a>
        <h3>
      <a href=北緯的咖啡豆
2026-01-12 11:30:22
沒錢還硬裝?寧夏一笑成名拒絕百萬簽約的小女孩,現(xiàn)在成了這樣

沒錢還硬裝?寧夏一笑成名拒絕百萬簽約的小女孩,現(xiàn)在成了這樣

不寫散文詩
2026-01-11 19:40:42
反轉了!居然全是演的!視頻已清空

反轉了!居然全是演的!視頻已清空

瑯琊新聞網(wǎng)
2026-01-11 23:34:05
A股:今天,放量并未大漲,跡象表明了,不出所料,很可能這樣走

A股:今天,放量并未大漲,跡象表明了,不出所料,很可能這樣走

丁丁鯉史紀
2026-01-12 12:12:02
格陵蘭島普通百姓:囤糧、存錢,努力保持冷靜,本以為美國是盟友,不料竟成其獵物

格陵蘭島普通百姓:囤糧、存錢,努力保持冷靜,本以為美國是盟友,不料竟成其獵物

紅星新聞
2026-01-11 17:33:21
2000萬粉絲演員哭窮炫富,多個賬號被禁言,代言產(chǎn)品全線停產(chǎn)

2000萬粉絲演員哭窮炫富,多個賬號被禁言,代言產(chǎn)品全線停產(chǎn)

21世紀經(jīng)濟報道
2026-01-10 15:33:36
深航從深圳起飛航班滑出時發(fā)生故障滑回,航司致歉!稱將補償

深航從深圳起飛航班滑出時發(fā)生故障滑回,航司致歉!稱將補償

南方都市報
2026-01-12 13:32:04
特朗普轉發(fā):“魯比奧將成為‘古巴總統(tǒng)’”

特朗普轉發(fā):“魯比奧將成為‘古巴總統(tǒng)’”

環(huán)球時報國際
2026-01-12 14:37:45
特朗普發(fā)圖自稱委內(nèi)瑞拉代總統(tǒng)

特朗普發(fā)圖自稱委內(nèi)瑞拉代總統(tǒng)

界面新聞
2026-01-12 11:13:10
開盤20分鐘兩市成交額突破1萬億 預計全天成交超3.8萬億

開盤20分鐘兩市成交額突破1萬億 預計全天成交超3.8萬億

財聯(lián)社
2026-01-12 09:52:29
當美國“不演了”,世界將面臨什么

當美國“不演了”,世界將面臨什么

上觀新聞
2026-01-12 06:30:31
反轉了!居然全是演的!視頻已清空

反轉了!居然全是演的!視頻已清空

洪觀新聞
2026-01-12 11:16:01
庫里31+5勇士不敵老鷹結束連勝,巴特勒30+7+6約翰遜23+11

庫里31+5勇士不敵老鷹結束連勝,巴特勒30+7+6約翰遜23+11

湖人崛起
2026-01-12 11:58:38
上千網(wǎng)友到合川幫女孩殺豬,車子從村頭停到了村尾,主廚:這么多張嘴掛身上,壓力太大了

上千網(wǎng)友到合川幫女孩殺豬,車子從村頭停到了村尾,主廚:這么多張嘴掛身上,壓力太大了

極目新聞
2026-01-12 13:44:34
林詩棟被訓懵了!王皓瘋狂輸出:你XX反手那么強 你啊 別慌別亂啊

林詩棟被訓懵了!王皓瘋狂輸出:你XX反手那么強 你啊 別慌別亂啊

風過鄉(xiāng)
2026-01-12 12:52:23
收評:三大指數(shù)均漲超1% 兩市成交額3.6萬億創(chuàng)歷史新高

收評:三大指數(shù)均漲超1% 兩市成交額3.6萬億創(chuàng)歷史新高

財聯(lián)社
2026-01-12 15:04:34
2026-01-12 15:28:49
MediaTea
MediaTea
專業(yè)的數(shù)字媒體、新媒體技術
1701文章數(shù) 72關注度
往期回顧 全部

科技要聞

小米二手車價大跳水:SU7半年跌5萬元

頭條要聞

德國就"奪島"發(fā)聲:國際法原則適用所有國家 包括美國

頭條要聞

德國就"奪島"發(fā)聲:國際法原則適用所有國家 包括美國

體育要聞

聰明的球員,不是教練教出來的

娛樂要聞

閆學晶:脫離群眾太久 忘了自己的根

財經(jīng)要聞

揭秘“穩(wěn)賺不賠”的代工項目騙局

汽車要聞

增配不加價 北京現(xiàn)代 第五代 勝達2026款上市

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

本地
時尚
游戲
手機
房產(chǎn)

本地新聞

云游內(nèi)蒙|“包”你再來?一座在硬核里釀出詩意的城

普通人就該照搬這些穿搭!衣服不用買太貴,自然耐看又舒適

PS5獨占新游太爛遭噴!玩家:獨占是不想退款吧?

手機要聞

iQOO Z11 Turbo官宣搭載2億大底超級主攝,支持4倍無損變焦

房產(chǎn)要聞

國家海岸 有鳳來儀|全維實景示范區(qū)首映海棠

無障礙瀏覽 進入關懷版