<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      Python:類 __dict__ 詳解

      0
      分享至

      在 Python 的對象模型中,類本身也是對象。既然是對象,它就擁有自己的命名空間(namespace),而這個命名空間正是通過類的 __dict__ 屬性來承載的。

      如果說實例 __dict__負責存儲實例對象的狀態(State),那么類 __dict__則負責定義行為與結構(Behavior & Structure)。深入理解類的 __dict__,是掌握 Python 中類屬性查找、描述符機制、繼承體系以及元編程的關鍵基礎。

      一、類 __dict__ 的本質:mappingproxy

      類 __dict__ 是一個映射對象,存儲了類級命名空間中的所有成員。

      print(A.__dict__)

      其核心內容包括:

      ? 類屬性:如 x。

      ? 方法函數:如 f(在類 __dict__ 中以原始函數形式存在)。

      ? 描述符對象:property、classmethod、staticmethod。

      ? 內置元數據:自動生成的屬性如 __module__、__doc__、 __dict__、__weakref__ 等。

      類對象的命名空間(即類 __dict__)里存儲的是一切被定義在類體中的對象,而這些對象在被訪問時,會根據它們是否實現了描述符協議,表現出不同的身份。

      存儲在 A.__dict__ 鍵值對中的鍵 “__dict__”,既不是類 __dict__,也不是實例 __dict__,它對應的值是一個 getset_descriptor(屬性描述符)。當調用 obj.__dict__ 時,實際上是觸發了類中的這個描述符,它負責去實例的內存地址中通過偏移量找到屬于該實例的 __dict__。

      需要注意的是,類 __dict__ 并不是普通的字典(dict):

      type(A.__dict__)  #

      這意味著它是一個只讀的映射視圖(mappingproxy),不允許進行直接修改操作。

      # TypeError: 'mappingproxy' object does not support item assignment

      Python 的設計初衷是,類結構的修改必須通過屬性賦值語義(如 setattr(A, 'x', 10) 或 A.x = 10)來完成。

      這樣做是為了確保每次修改都能觸發底層的元類鉤子、更新緩存,并維護描述符機制以及多繼承體系下的一致行為。

      二、生成時機:類創建的“快照”

      類 __dict__ 并非在運行期動態累積生成的,而是在類創建階段一次性生成的。

      1、執行類體

      Python 會先創建一個臨時命名空間(一個普通的字典),順序執行類體內的代碼。

          def f(self): pass

      2、調用元類

      類體執行完成后,將該命名空間傳遞給元類(默認是 type)。

      等價于:

      A = type('A', (object,), namespace)

      其中 namespace 最終成為 A.__dict__ 的內容。

      3、封裝視圖

      元類完成類對象的實例化,并將該命名空間封裝為 mappingproxy 并綁定到類 __dict__。

      因此,類 __dict__ 是類創建完成時的一個結構快照。后續通過 A.y = 2 等方式添加或修改屬性,實際上會同步更新其底層的映射內容。

      三、屬性查找鏈中的核心角色

      當訪問 obj.attr 時,Python 遵循一套嚴格的查找優先級:

      1、數據描述符:先在類及其父類的 __dict__ 中查找實現了 __set__ 方法的描述符。

      2、實例 __dict__:查找實例自身的屬性。

      3、非數據描述符/普通屬性:在類 __dict__ 中查找方法(如普通函數)或類級變量。

      4、父類 __dict__:按照 MRO(方法解析順序) 向上追溯。

      5、兜底方案:觸發 __getattr__()。

      可見,類 __dict__ 是屬性查找鏈中的核心節點。方法、屬性、描述符均來源于類 __dict__。

      示例:

      a.x  # 10(查找 A.__dict__ 得到)

      因為 x 存在于 A.__dict__。

      四、類 __dict__ 與繼承、MRO 的關系

      (1)子類不會復制父類 __dict__

      # B.__dict__  僅包含 B 新定義的成員,如 y

      父類成員通過 MRO 查找,而非物理復制。

      (2)MRO 決定類 __dict__ 的查找順序

      屬性的繼承是通過 MRO 鏈條實現的。

      # (
      
       , 
      
       , 
      
       )
      
      
      

      當在 B 的實例中訪問 x 時,Python 先在 B.__dict__ 中查找;若未找到,則根據 B.__mro__ 進入 A.__dict__ 查找,以此類推。

      B.__dict__  →  A.__dict__  →  object.__dict__

      這種機制既保證了內存效率(無需冗余拷貝),也保證了動態性(修改父類時,子類可立即生效)。

      五、類 __dict__ 與描述符機制

      類 __dict__ 是描述符生效的唯一入口。

      A.__dict__['x']  #

      訪問 a.x 時,實際上會觸發:

      property.__get__(a, A)

      描述符必須存在于類的 __dict__ 中才能正常工作。實例的 __dict__ 僅用于存儲數據,無法承載描述符這類行為邏輯。

      六、類 __dict__ 與方法綁定機制

      在類 __dict__ 中,所有的實例方法都只是普通的函數對象:

      print(type(A.__dict__['f']))  #

      當通過實例訪問方法時:

      a.f

      Python 檢測到函數對象實現了描述符協議,于是自動調用:

      function.__get__(a, A)

      從而將函數綁定到實例上,生成一個 Bound Method 對象。

      因此,方法定義在類的 __dict__ 中,實例本身并不擁有方法,實例只是提供 self 并完成方法綁定。

      七、類 __dict__ 與元類寫入行為

      元類可以在類創建階段直接修改即將成為類 __dict__ 的命名空間:

      print(A.added)  # 輸出:42

      自定義元類時,通過操作 namespace(即未來的 A.__dict__),我們可以實現自動注入屬性、修改類定義等功能:

      print(Service.tag)  # 輸出: Processed

      ORM 框架(如 Django, SQLAlchemy)正是利用這一點,將類屬性轉化為數據庫字段的映射。

      八、常見誤解與澄清

      誤解 1:類屬性存放在實例中

      ? 錯誤

      ? 正解:類屬性只存在于類 __dict__ 中。實例僅存儲個性化數據。

      誤解 2:子類會復制父類 __dict__

      ? 錯誤

      ? 正解:子類僅通過 MRO 查找父類成員,兩者物理隔離。

      誤解 3:可以隨意修改 A.__dict__

      ? 錯誤

      ? 正解:它是 mappingproxy,必須使用賦值語義(比如 A.attr = v)修改。

      誤解 4:方法屬于實例

      ? 錯誤

      ? 正解:方法定義在類 __dict__ 中,訪問時通過描述符動態綁定實例。

      小結

      類 __dict__ 是類對象的命名空間,用于存儲類屬性、方法和描述符。它在類創建階段由元類一次性生成,并以只讀的 mappingproxy 形式暴露。類 __dict__ 是屬性查找、方法綁定、描述符生效和繼承體系運作的核心。子類不會復制父類 __dict__,而是通過 MRO 動態查找。

      理解類 __dict__,有助于深入掌握 Python 的類模型、方法解析順序與元編程機制。


      點贊有美意,贊賞是鼓勵

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

      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.

      相關推薦
      熱點推薦
      李在明訪華剛回國,就通告全球,與高市共進晚餐,3億大單白簽?

      李在明訪華剛回國,就通告全球,與高市共進晚餐,3億大單白簽?

      愛看劇的阿峰
      2026-01-11 17:30:56
      特朗普稱伊朗已請求進行談判

      特朗普稱伊朗已請求進行談判

      財聞
      2026-01-12 15:19:26
      美國得到格陵蘭島的三種可能路徑:只剩3年任期的特朗普VS千年命運考量的島民

      美國得到格陵蘭島的三種可能路徑:只剩3年任期的特朗普VS千年命運考量的島民

      紅星新聞
      2026-01-09 19:24:42
      名記曝火箭輸球原因:在薩克拉門托找不到酒店?。〈洠赫赡?>
    </a>
        <h3>
      <a href=名記曝火箭輸球原因:在薩克拉門托找不到酒店住!船記:咋可能 Emily說個球
      2026-01-12 13:04:02
      取代郭士強?男籃或換帥,名帥曝光,加拿大,曾培養多個NBA球星

      取代郭士強?男籃或換帥,名帥曝光,加拿大,曾培養多個NBA球星

      樂聊球
      2026-01-11 15:25:51
      NBA今日里程碑!字母哥歷史第1,庫里超越喬丹,德羅贊26000分

      NBA今日里程碑!字母哥歷史第1,庫里超越喬丹,德羅贊26000分

      世界體育圈
      2026-01-12 13:40:50
      卷走53億!又一大佬帶全家跑路,欠中國銀行20億,投資者血本無歸

      卷走53億!又一大佬帶全家跑路,欠中國銀行20億,投資者血本無歸

      以茶帶書
      2025-12-09 23:33:58
      最討厭的演員排名,潘長江僅第五,閆學晶第二,第一毋庸置疑

      最討厭的演員排名,潘長江僅第五,閆學晶第二,第一毋庸置疑

      林雁飛
      2026-01-04 19:29:51
      “青提”是大陸用語?臺灣一甜品店遭青鳥圍剿,業者緊急發聲

      “青提”是大陸用語?臺灣一甜品店遭青鳥圍剿,業者緊急發聲

      金牛傳音
      2026-01-12 15:36:13
      上梁不正下梁歪?半個月吳秀波迎兩大噩耗,兒子兩年前疑自絕后路

      上梁不正下梁歪?半個月吳秀波迎兩大噩耗,兒子兩年前疑自絕后路

      素衣讀史
      2025-12-17 14:03:31
      陪玩陪睡已過時!拳頭塞嘴、集體開嫖、戚薇遭殃,陰暗面徹底曝光

      陪玩陪睡已過時!拳頭塞嘴、集體開嫖、戚薇遭殃,陰暗面徹底曝光

      涵豆說娛
      2025-11-20 16:35:46
      65歲男人和37歲女人再婚,女人:他老折騰我,男人:夫妻就這樣

      65歲男人和37歲女人再婚,女人:他老折騰我,男人:夫妻就這樣

      惟來
      2026-01-11 13:11:12
      他是道德上的小人,卻是政治上的巨人

      他是道德上的小人,卻是政治上的巨人

      小豫講故事
      2026-01-10 06:00:08
      1972年,毛主席當眾指著她鼻子罵:你男人跟別人好了,你怎么不離婚?

      1972年,毛主席當眾指著她鼻子罵:你男人跟別人好了,你怎么不離婚?

      寄史言志
      2026-01-07 21:08:15
      外媒:英國正為烏克蘭研發可深入打擊俄境內目標的新型彈道導彈

      外媒:英國正為烏克蘭研發可深入打擊俄境內目標的新型彈道導彈

      環球網資訊
      2026-01-12 12:50:37
      俄軍擊落F-16,不可擊落神話破滅,一發打擊,一發補刀

      俄軍擊落F-16,不可擊落神話破滅,一發打擊,一發補刀

      孫餛北漂拍客
      2026-01-12 13:14:26
      中東國家都意識到了:就算中國高端武器再多,也沒辦法保護他們

      中東國家都意識到了:就算中國高端武器再多,也沒辦法保護他們

      肖茲探秘說
      2026-01-01 20:16:34
      1986年陳永貴病逝,追悼會規格成難題,鄧小平只說了一句話,全場安靜

      1986年陳永貴病逝,追悼會規格成難題,鄧小平只說了一句話,全場安靜

      寄史言志
      2026-01-04 16:34:31
      賴清德再無后路,鄭麗文向島內2300萬民眾做保證,特朗普已選邊站

      賴清德再無后路,鄭麗文向島內2300萬民眾做保證,特朗普已選邊站

      博覽歷史
      2026-01-11 18:52:29
      哭老慘了!真燒??!

      哭老慘了!真燒??!

      貴圈真亂
      2026-01-12 11:45:52
      2026-01-12 16:04:49
      MediaTea
      MediaTea
      專業的數字媒體、新媒體技術
      1701文章數 72關注度
      往期回顧 全部

      科技要聞

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

      頭條要聞

      女子坐火車遇71歲初中班主任 被一口叫出名字感動落淚

      頭條要聞

      女子坐火車遇71歲初中班主任 被一口叫出名字感動落淚

      體育要聞

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

      娛樂要聞

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

      財經要聞

      A股大漲 兩市成交額3.6萬億創歷史新高

      汽車要聞

      增配不加價 北京現代 第五代 勝達2026款上市

      態度原創

      健康
      本地
      房產
      藝術
      數碼

      血常規3項異常,是身體警報!

      本地新聞

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

      房產要聞

      重磅調規!417畝商改住+教育地塊!??谖骱0队忠l!

      藝術要聞

      畫完這組畫,他抑郁了,后來自殺了

      數碼要聞

      小米三款新品登陸韓國市場:含充電寶、降噪耳機等

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产爆乳美女娇喘呻吟| 人妻无码久久久久久久久久久| 99热这里有精品| 水蜜桃视频在线观看免费18| 亚洲VA不卡一区| 免费男人下部进女人下部视频| 白浆网站| 多人乱p视频在线免费观看| 亚洲中文字幕久久无码精品A| 欧美奶涨边摸边做爰视频| 99热这里只有精品3| 国产高清av首播原创麻豆| 成人亚洲精品一区二区三区嫩花| 九九熟女| 少妇人妻偷人精品免费视频| 无毒无码不卡| 在线观看视频一区二区三区| 亚洲精品另类有吗中文字幕| 伊人久久无码中文字幕| 99久久国产亚洲综合精品| 夜鲁鲁鲁夜夜综合视频| 国产熟女掹操| av色导航| 91无码国产成人精品| 俄罗斯老熟妇乱子伦视频| 毛片在线播放网址| 久青草视频免费视频福利片 | 一区二区三区精品偷拍| 无码AV中文字幕久久专区| 欧美性受xxxx白人性爽| 国产av一区二区三区日韩| 女人被爽到高潮视频免费国产| 一本到无码AV专区无码| 97久久爽无码人妻AⅤ精品牛牛| 无码人妻一区二区三区三区| 人妻人人澡人人添人人爽人人玩| 久久久久久久综合日本| 国产一卡2卡三卡4卡 精| 麻豆国产乱人伦精品一区二区| 欧美卡一卡二卡四卡免费| 深夜福利在线观看视频|