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

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

Python:模塊 __dict__ 詳解

0
分享至

在 Python 中,模塊(module)是一級命名空間對象。無論是通過 import 加載的標(biāo)準(zhǔn)庫模塊、第三方模塊,還是直接運行的腳本本身,每個模塊都以對象形式存在于內(nèi)存中,并通過其 __dict__ 屬性統(tǒng)一管理所有模塊級名稱。

理解模塊的 __dict__,不僅是掌握模塊工作機制的關(guān)鍵,也是深入理解 Python 命名空間模型、導(dǎo)入機制以及運行期動態(tài)行為的重要基礎(chǔ)。

一、模塊對象與模塊命名空間

(1)模塊是運行期對象,而非靜態(tài)概念

在 Python 中,模塊不是“代碼文件”的抽象概念,而是運行期存在的實際對象。

print(type(math))    #

每一個模塊對象都擁有一組標(biāo)準(zhǔn)屬性,例如:

? __name__:模塊名稱

? __file__:模塊源文件路徑

? __spec__:模塊的導(dǎo)入規(guī)范

? __loader__:模塊加載器

? __dict__:模塊命名空間

其中,__dict__ 是模塊命名空間的唯一物理載體,存儲了模塊中的所有名稱。

(2)模塊 __dict__ 的定義

模塊 __dict__ 表示模塊級的命名空間本身。模塊中通過賦值語句、函數(shù)定義、類定義、import 語句創(chuàng)建的所有名稱,最終都存儲在這個字典中。

示例:

    pass

加載后查看其命名空間:

print(demo.__dict__.keys())

輸出:

dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__file__', '__cached__', '__builtins__', 'x', 'f', 'C'])

可以看到,模塊 __dict__ 既包含用戶定義的變量、函數(shù)、類,也包含系統(tǒng)自動添加的元信息。

二、types 模塊與 ModuleType 的作用

為了準(zhǔn)確理解模塊 __dict__,需要明確模塊對象的具體類型。

(1)types 模塊的角色

標(biāo)準(zhǔn)庫 模塊提供了對解釋器內(nèi)部核心對象類型的標(biāo)準(zhǔn)化引用,如:

? FunctionType 函數(shù)類型

? MethodType 方法類型

? ModuleType 模塊類型

? GeneratorType 生成器類型

這些不是“新類型”,而是對既有內(nèi)置類型的正式命名,便于類型檢查和明確意圖。

(2)ModuleType 的本質(zhì)

types.ModuleType 表示模塊對象的類型:

print(type(math) is types.ModuleType)    # True

所有通過 import 得到的模塊對象,本質(zhì)上都是 ModuleType 的實例。

(3)ModuleType 的構(gòu)造語義

types.ModuleType(name, doc=None)

參數(shù)含義:

? name:模塊名(對應(yīng) __name__)

? doc: 模塊文檔字符串(對應(yīng) __doc__)

示例:

print(m.__dict__)   # {}

(4)ModuleType 創(chuàng)建的是真實模塊對象

需要明確的一點是,types.ModuleType 創(chuàng)建的并不是“偽模塊”,而是真正的模塊對象。區(qū)別僅在于:

特性

import 創(chuàng)建的模塊

ModuleType 創(chuàng)建的模塊

代碼執(zhí)行

自動執(zhí)行模塊代碼

不自動執(zhí)行代碼

__dict__ 填充

自動填充

初始為空字典

系統(tǒng)屬性

自動設(shè)置 __spec__、__loader__

需手動設(shè)置

注冊到 sys.modules

自動注冊

不自動注冊

在對象模型層面,它們完全一致:

print(type(m1) is type(m2))  # True

(5)使用 ModuleType 的意義

使用 ModuleType 的目的在于:隔離模塊對象結(jié)構(gòu)本身與 import 機制的副作用。

示例:

print(m.__dict__)  # {'x': 42, 'hello': at ...>}

這清晰地體現(xiàn)了:

? 模塊屬性 ≡ 模塊 .__dict__ 中的鍵值對

? 模塊命名空間完全由模塊 __dict__ 管理

三、模塊 __dict__ 的生命周期

模塊 __dict__ 的生命周期與模塊對象本身嚴(yán)格一致。

(1)創(chuàng)建階段

執(zhí)行順序為:

1、創(chuàng)建模塊對象:實例化 ModuleType

2、初始化空 __dict__:創(chuàng)建空字典作為命名空間

3、執(zhí)行模塊代碼:逐條執(zhí)行語句,將結(jié)果寫入 __dict__。

exec(open('demo.py').read(), demo.__dict__)    # 導(dǎo)入過程的“概念性等價描述”

(2)運行階段:動態(tài)可變

模塊 __dict__ 是一個完全可寫的普通字典,可在運行時動態(tài)改變:

del demo.__dict__['new_var']

模塊在運行期可以:

? 動態(tài)添加屬性/刪除屬性

? 可被反射、注入、修改

? 作為插件系統(tǒng)的載體

(3)銷毀階段

當(dāng)模塊對象被垃圾回收時,模塊 __dict__ 隨對象一同銷毀,其命名空間不再存在。

通常,模塊會常駐內(nèi)存,因為 sys.modules 持有對模塊對象的強引用。除非顯式從 sys.modules 中刪除,否則模塊對象及其 __dict__ 會一直存在。

四、模塊 __dict__ 與屬性訪問機制

模塊屬性訪問遵循簡單直接的規(guī)則:

module.attr

在屬性存在的情況下,在語義上等價于:

module.__dict__['attr']

二者在異常類型上略有差異。

屬性訪問特點:

? 無方法綁定:模塊中的函數(shù)始終是普通函數(shù)對象。

? 無 MRO 查找:不存在繼承鏈查找。

? 無描述符處理:不涉及 __get__/__set__ 協(xié)議,即使模塊中存在實現(xiàn)了描述符協(xié)議的對象,模塊屬性訪問也不會觸發(fā)描述符綁定邏輯。

? 直接字典查找:屬性訪問就是字典鍵查找。

示例:

demo.f()  # 返回 "function",不會生成方法對象

五、模塊 __dict__ 的典型用途

(1)反射與調(diào)試

可用于枚舉模塊成員、動態(tài)分析模塊結(jié)構(gòu)以及 REPL / 調(diào)試器實現(xiàn)。

pdb.set_trace()  # 調(diào)試器內(nèi)部使用 __dict__ 訪問局部變量

(2)動態(tài)注入 API

常見于插件系統(tǒng)、框架自動注冊以及運行期擴展接口。

    sys.modules[module_name] = module

(3)框架自動注冊

    return decorator

六、不同對象的命名空間對比

對象類型

__dict__ 特性

可變性

特殊行為

實例

普通 dict

完全可變

支持屬性訪問協(xié)議

mappingproxy

需通過賦值語句

支持繼承、描述符

模塊

普通 dict(完全可寫)

完全可變

直接字典映射

模塊是唯一一個頂層、全局、完全可變的命名空間對象,這也是它常被用作配置容器、插件載體、全局狀態(tài)管理的原因。

小結(jié)

模塊 __dict__ 是模塊命名空間的實體載體,保存了模塊中定義的全部名稱。模塊對象本質(zhì)上是 types.ModuleType 的實例,其 __dict__ 是一個普通、完全可寫的字典。模塊加載時,解釋器創(chuàng)建模塊對象并逐步填充其 __dict__;運行期中,該字典可被動態(tài)修改。模塊屬性訪問直接映射到 __dict__ 查找,不涉及方法綁定或 MRO。

理解模塊 __dict__,是理解 Python 命名空間、import 機制以及動態(tài)特性的關(guān)鍵基礎(chǔ)。


點贊有美意,贊賞是鼓勵

特別聲明:以上內(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)推薦
熱點推薦
53.8%!美國勞動者報酬占GDP比重創(chuàng)新低

53.8%!美國勞動者報酬占GDP比重創(chuàng)新低

環(huán)球網(wǎng)資訊
2026-01-12 06:46:10
華為固態(tài)電池續(xù)航3000公里快充5分鐘全球領(lǐng)先

華為固態(tài)電池續(xù)航3000公里快充5分鐘全球領(lǐng)先

南風(fēng)不及你溫柔
2026-01-08 23:52:47
123-114!尼克斯終結(jié)開拓者5連勝,阿夫迪亞最后時刻傷退,楊瀚森未出場

123-114!尼克斯終結(jié)開拓者5連勝,阿夫迪亞最后時刻傷退,楊瀚森未出場

夢憶之淺
2026-01-12 10:17:37
不上小楊就輸,楊瀚森在連上8場后遭DNP,此前開拓者8戰(zhàn)7勝+5連勝

不上小楊就輸,楊瀚森在連上8場后遭DNP,此前開拓者8戰(zhàn)7勝+5連勝

懂球帝
2026-01-12 09:40:09
CCTV5直播,黃金時間,中國男足勝泰國=頭名出線+首次晉級八強

CCTV5直播,黃金時間,中國男足勝泰國=頭名出線+首次晉級八強

側(cè)身凌空斬
2026-01-12 00:41:25
光明正大摸魚!25歲女子在初創(chuàng)公司沒事做,老板:你無聊就看電視

光明正大摸魚!25歲女子在初創(chuàng)公司沒事做,老板:你無聊就看電視

唐小糖說情感
2026-01-10 21:27:48
盧比奧一語道破委內(nèi)瑞拉荒誕真相:馬杜羅的江山,古巴人的管家

盧比奧一語道破委內(nèi)瑞拉荒誕真相:馬杜羅的江山,古巴人的管家

老馬拉車莫少裝
2026-01-05 21:46:08
日媒沮喪發(fā)聲:張本智和爆冷出局止步四強 日乒選手竟無一入決賽

日媒沮喪發(fā)聲:張本智和爆冷出局止步四強 日乒選手竟無一入決賽

顏小白的籃球夢
2026-01-11 22:07:00
悲催!中山一成立20年工廠關(guān)停,稱產(chǎn)業(yè)持續(xù)惡劣,與員工協(xié)商補償

悲催!中山一成立20年工廠關(guān)停,稱產(chǎn)業(yè)持續(xù)惡劣,與員工協(xié)商補償

火山詩話
2026-01-12 09:41:38
“萬村”虧損退房 郁亮的功與過

“萬村”虧損退房 郁亮的功與過

好貓財經(jīng)
2026-01-12 09:06:45
兩岸喜訊!大陸沒想到,沒等正式收臺,臺當(dāng)局先送來2份“大禮”

兩岸喜訊!大陸沒想到,沒等正式收臺,臺當(dāng)局先送來2份“大禮”

趣生活
2026-01-10 22:29:06
5后衛(wèi)!董路:這是國足贏強隊的唯一方式 中國人踢不了復(fù)雜足球

5后衛(wèi)!董路:這是國足贏強隊的唯一方式 中國人踢不了復(fù)雜足球

風(fēng)過鄉(xiāng)
2026-01-12 08:13:35
44歲張杰近照曝光:體脂低至8%,這肌肉是認(rèn)真的嗎?

44歲張杰近照曝光:體脂低至8%,這肌肉是認(rèn)真的嗎?

健身迷
2026-01-10 09:47:21
順德魚生是淡水生魚片,不擔(dān)心寄生蟲嗎?網(wǎng)友:大數(shù)據(jù)不會騙人!

順德魚生是淡水生魚片,不擔(dān)心寄生蟲嗎?網(wǎng)友:大數(shù)據(jù)不會騙人!

夜深愛雜談
2025-12-23 17:35:17
“虐女戲”一姐閆學(xué)晶,為何“賣慘”翻車

“虐女戲”一姐閆學(xué)晶,為何“賣慘”翻車

凹凹滴
2026-01-11 12:00:22
為啥唐氏兒“千人一面”?好像都長得一模一樣?是什么原因引起的

為啥唐氏兒“千人一面”?好像都長得一模一樣?是什么原因引起的

向航說
2026-01-02 00:20:03
價格接近“腰斬”!大量上市,浙江老板卻發(fā)愁:賣不出去啊……過年前價格或要漲!

價格接近“腰斬”!大量上市,浙江老板卻發(fā)愁:賣不出去啊……過年前價格或要漲!

環(huán)球網(wǎng)資訊
2026-01-11 16:51:09
iPhone 17e即將發(fā)布,劉海屏徹底成為歷史

iPhone 17e即將發(fā)布,劉海屏徹底成為歷史

泡泡網(wǎng)
2026-01-12 10:52:35
日本找到降低依賴中國稀土方法,并決定在G7財長會議上分享經(jīng)驗

日本找到降低依賴中國稀土方法,并決定在G7財長會議上分享經(jīng)驗

止戈軍是我
2026-01-11 21:51:56
漢奸石平返回東京,還在自己的社交媒體上為自己的行程邀功!

漢奸石平返回東京,還在自己的社交媒體上為自己的行程邀功!

荊楚寰宇文樞
2026-01-11 20:49:09
2026-01-12 11:35:00
MediaTea
MediaTea
專業(yè)的數(shù)字媒體、新媒體技術(shù)
1701文章數(shù) 72關(guān)注度
往期回顧 全部

科技要聞

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

頭條要聞

日媒披露高市早苗或有大動作 傳出兩個方案

頭條要聞

日媒披露高市早苗或有大動作 傳出兩個方案

體育要聞

U23國足形勢:末輪不負(fù)泰國即確保晉級

娛樂要聞

留幾手為閆學(xué)晶叫屈?稱網(wǎng)友自卑敏感

財經(jīng)要聞

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

汽車要聞

2026款宋Pro DM-i長續(xù)航補貼后9.98萬起

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

手機
數(shù)碼
健康
公開課
軍事航空

手機要聞

榮耀Magic8 RSR保時捷設(shè)計新機完整參數(shù)曝光,支持天通衛(wèi)星通信

數(shù)碼要聞

玩家有得等了:AMD下代RDNA 5顯卡要到2027年底!

這些新療法,讓化療不再那么痛苦

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

俄大使:馬杜羅夫婦被控制時身邊沒人

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