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

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

Python:__class__ 詳解

0
分享至

在 Python 的對(duì)象模型中,__class__是每個(gè)對(duì)象都具備的重要屬性,它指向?qū)ο笏鶎俚摹邦?lèi)對(duì)象”(class object),是運(yùn)行期類(lèi)型系統(tǒng)的核心基石。通過(guò)它,Python 實(shí)現(xiàn)了動(dòng)態(tài)類(lèi)型識(shí)別、方法查找、繼承鏈遍歷與類(lèi)型檢查等關(guān)鍵機(jī)制。

一、什么是 __class__?

__class__ 是所有 Python 對(duì)象(包括函數(shù)、類(lèi)、實(shí)例、模塊、數(shù)字等)都擁有的屬性,它記錄了“該對(duì)象實(shí)際屬于哪個(gè)類(lèi)”。

示例:

#

它等價(jià)于:

type(x)

因此可以理解為:__class__ 是對(duì)象的運(yùn)行期“類(lèi)型指針”。

任何對(duì)象在 Python 中的行為(方法、屬性查找、繼承關(guān)系等)都依賴(lài)于 __class__ 所指向的類(lèi)。

二、__class__ 的設(shè)計(jì)目的

Python 是動(dòng)態(tài)類(lèi)型語(yǔ)言,對(duì)象在運(yùn)行時(shí)才能確定其類(lèi)型。

因此對(duì)象必須持有一個(gè)指向其類(lèi)的引用,用于:

? 確定對(duì)象有哪些屬性 / 方法

? 查找 MRO(方法解析順序)

? 執(zhí)行 isinstance()、issubclass() 檢查

? 框架、調(diào)試器、序列化工具進(jìn)行反射

? 根據(jù)類(lèi)對(duì)象構(gòu)建新實(shí)例(工廠模式等)

例如:

print(a.__class__)  # 可能輸出:

此引用在整個(gè)生命周期保持穩(wěn)定。

三、__class__ 的結(jié)構(gòu)與其不變性

(1)每個(gè)對(duì)象都有 __class__

包括:

? 實(shí)例對(duì)象 (a = A())

? 類(lèi)對(duì)象自身 (A.__class__)

? 模塊對(duì)象

? 函數(shù)對(duì)象

? 數(shù)字、字符串、列表……

? 類(lèi)型對(duì)象本身

示例:

# 

類(lèi)的類(lèi)型是 type。

(2)__class__ 通常不可更改(或不應(yīng)更改)

部分情況下可以修改,但極不建議:

x.__class__ = B   # 可行,但破壞對(duì)象內(nèi)部結(jié)構(gòu)

這種行為會(huì)破壞實(shí)例布局與內(nèi)存結(jié)構(gòu),往往導(dǎo)致不可預(yù)期的錯(cuò)誤。

(3)obj.__class__ is type(obj) 恒成立

無(wú)論對(duì)象類(lèi)型為何:

obj.__class__ is type(obj)  # True

兩者是同一語(yǔ)義。

四、__class__在 Python 對(duì)象系統(tǒng)中的用途

(1)決定屬性查找路徑

訪問(wèn)對(duì)象屬性時(shí),解釋器會(huì):

1、查對(duì)象實(shí)例字典(__dict__)

2、查 __class__

3、查 MRO(父類(lèi)鏈)

__class__ 是類(lèi)查找的起點(diǎn)。

(2)支撐反射與動(dòng)態(tài)創(chuàng)建對(duì)象

框架常用:

obj.__class__.__dict__

例如 Django ORM、Pydantic、FastAPI、序列化庫(kù)(pickle/dill)大量依賴(lài) __class__。

(3)用于類(lèi)型判斷

與 的底層原理都與 __class__ 相關(guān)。

(4)支持運(yùn)行期動(dòng)態(tài)派發(fā)

Python 是動(dòng)態(tài)綁定語(yǔ)言,方法不會(huì)在編譯期綁定,必須從 __class__ 開(kāi)始查找。

五、__class__ 與類(lèi)對(duì)象的關(guān)系

類(lèi)本身也是對(duì)象,它也有 __class__:

# 

? 所有類(lèi)對(duì)象由 type 類(lèi)負(fù)責(zé)構(gòu)建

? type 是 Python 對(duì)象系統(tǒng)的頂層

自反結(jié)構(gòu):

type.__class__ is type   # True

這是 Python 類(lèi)系統(tǒng)的“封閉自指”特性,用于構(gòu)建元類(lèi)(metaclass)機(jī)制。

六、典型應(yīng)用場(chǎng)景與實(shí)踐示例

(1)獲取對(duì)象所屬類(lèi)名

    print(obj.__class__.__name__)

(2)通過(guò)類(lèi)構(gòu)造新對(duì)象(工廠模式)

new_obj = obj.__class__()

這在序列化工具、高階框架中極常見(jiàn)。

(3)動(dòng)態(tài)檢測(cè)對(duì)象類(lèi)型

    ...

比 isinstance 更嚴(yán)格(不接受子類(lèi))。

(4)元類(lèi)中根據(jù)類(lèi)結(jié)構(gòu)做自動(dòng)化處理

    pass

元類(lèi)利用 __class__ 構(gòu)建新的類(lèi)對(duì)象。

(5)調(diào)試:打印對(duì)象類(lèi)型信息

print(type(obj), obj.__class__)

兩者永遠(yuǎn)一致,適用于調(diào)試框架底層邏輯。

七、常見(jiàn)陷阱與注意事項(xiàng)

(1)不要隨意修改 __class__

即使能修改,也會(huì)破壞內(nèi)部結(jié)構(gòu):

x.__class__ = B

若 B 使用完全不同的布局(例如 __slots__),將導(dǎo)致內(nèi)存錯(cuò)亂。

(2)__class__ 不等于模塊路徑

不能用于導(dǎo)入:

# 錯(cuò)誤

需要使用:

name = obj.__class__.__name__

(3)類(lèi)方法、實(shí)例方法的 __class__ 是 function / method 類(lèi)型

例如:

print(a.static_method.__class__)   #

? 實(shí)例方法:通過(guò)類(lèi)訪問(wèn)是函數(shù),通過(guò)實(shí)例訪問(wèn)是綁定方法。

? 類(lèi)方法:總是綁定方法(綁定到類(lèi))。

? 靜態(tài)方法:總是函數(shù)。

(4)__class__ 與 __dict__、MRO 構(gòu)成反射三大件

反射場(chǎng)景常用:

print(cls.__mro__)

小結(jié)

__class__ 是 Python 動(dòng)態(tài)類(lèi)型系統(tǒng)中最關(guān)鍵的屬性之一,用于記錄對(duì)象的實(shí)際類(lèi)型并連接到其類(lèi)對(duì)象。所有屬性查找、方法分派、繼承鏈遍歷、類(lèi)型檢查以及框架反射,都以它為起點(diǎn)。它在對(duì)象定義時(shí)確定,通常不應(yīng)被修改。

理解 __class__ 可以幫助開(kāi)發(fā)者更深入掌握 Python 的對(duì)象模型、元類(lèi)機(jī)制與動(dòng)態(tài)行為,對(duì)設(shè)計(jì)大型系統(tǒng)、框架或工具尤為重要。


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

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(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)推薦
重慶兩名女子從重慶北站打車(chē)到沙坪壩,20公里被收195元,打車(chē)平臺(tái)預(yù)估僅需20余元,當(dāng)?shù)亟煌▓?zhí)法局:黑車(chē)假冒出租車(chē),司機(jī)涉嫌非法營(yíng)運(yùn)

重慶兩名女子從重慶北站打車(chē)到沙坪壩,20公里被收195元,打車(chē)平臺(tái)預(yù)估僅需20余元,當(dāng)?shù)亟煌▓?zhí)法局:黑車(chē)假冒出租車(chē),司機(jī)涉嫌非法營(yíng)運(yùn)

環(huán)球網(wǎng)資訊
2026-01-11 08:00:27
商務(wù)部印發(fā)《大連等9城市服務(wù)業(yè)擴(kuò)大開(kāi)放綜合試點(diǎn)任務(wù)》,青島在列

商務(wù)部印發(fā)《大連等9城市服務(wù)業(yè)擴(kuò)大開(kāi)放綜合試點(diǎn)任務(wù)》,青島在列

易瞰青島
2026-01-11 10:44:05
2場(chǎng)0勝!曝41歲曼聯(lián)救火教練6天便下課,周一官宣新帥:索肖出局

2場(chǎng)0勝!曝41歲曼聯(lián)救火教練6天便下課,周一官宣新帥:索肖出局

我愛(ài)英超
2026-01-12 07:14:35
廣東寶媽買(mǎi)洗碗機(jī)被砸家后續(xù):丈夫同意離婚, 本人卻要求還20萬(wàn)債

廣東寶媽買(mǎi)洗碗機(jī)被砸家后續(xù):丈夫同意離婚, 本人卻要求還20萬(wàn)債

科學(xué)發(fā)掘
2026-01-11 07:18:21
歷經(jīng)十幾年談判,5個(gè)縣都劃歸鄰國(guó),如今現(xiàn)狀如何了?

歷經(jīng)十幾年談判,5個(gè)縣都劃歸鄰國(guó),如今現(xiàn)狀如何了?

鶴羽說(shuō)個(gè)事
2026-01-09 14:29:53
2026年新成語(yǔ):惡意尋子!該警惕了,細(xì)節(jié)越挖越心寒!

2026年新成語(yǔ):惡意尋子!該警惕了,細(xì)節(jié)越挖越心寒!

你食不食油餅
2026-01-11 06:41:42
輸不起?皇馬拒為巴薩列隊(duì)+姆總率眾將離場(chǎng) 阿隆索:不看重的獎(jiǎng)杯

輸不起?皇馬拒為巴薩列隊(duì)+姆總率眾將離場(chǎng) 阿隆索:不看重的獎(jiǎng)杯

我愛(ài)英超
2026-01-12 06:18:38
中方對(duì)高市早苗不再手下留情,李在明主動(dòng)跟進(jìn),反手捅了日本一刀

中方對(duì)高市早苗不再手下留情,李在明主動(dòng)跟進(jìn),反手捅了日本一刀

空天力量
2026-01-11 17:23:50
全員Pro Max,你們都需要對(duì)小米說(shuō)聲謝謝

全員Pro Max,你們都需要對(duì)小米說(shuō)聲謝謝

科技鋒說(shuō)
2026-01-11 06:13:56
法國(guó)超熟齡性工作者,88歲還在接客?自稱(chēng)“越老越搶手”,入行原因太心酸!

法國(guó)超熟齡性工作者,88歲還在接客?自稱(chēng)“越老越搶手”,入行原因太心酸!

新歐洲
2026-01-10 19:38:22
馬斯克顛覆式提出能源終極方案

馬斯克顛覆式提出能源終極方案

第一財(cái)經(jīng)資訊
2026-01-11 19:07:23
被大家猜中了!洗碗機(jī)的女主角起號(hào)成功,直播間人數(shù)超過(guò)3000…

被大家猜中了!洗碗機(jī)的女主角起號(hào)成功,直播間人數(shù)超過(guò)3000…

火山詩(shī)話(huà)
2026-01-10 15:13:33
米萊交出亮眼答卷:阿根廷償清全部美債 貧困人口減半支持率破6成

米萊交出亮眼答卷:阿根廷償清全部美債 貧困人口減半支持率破6成

老馬拉車(chē)莫少裝
2026-01-11 22:31:11
皇馬的痛!19歲恩德里克獲8.2分+MVP:首秀一劍封喉,助法甲勁旅晉級(jí)

皇馬的痛!19歲恩德里克獲8.2分+MVP:首秀一劍封喉,助法甲勁旅晉級(jí)

側(cè)身凌空斬
2026-01-12 05:57:37
燒光500億的“中國(guó)寶馬”,引爆2026年第一顆雷

燒光500億的“中國(guó)寶馬”,引爆2026年第一顆雷

金錯(cuò)刀
2026-01-10 20:09:00
閆學(xué)晶發(fā)文致歉:我討厭那個(gè)下意識(shí)里露出輕視的自己

閆學(xué)晶發(fā)文致歉:我討厭那個(gè)下意識(shí)里露出輕視的自己

紅星新聞
2026-01-11 21:29:38
1隊(duì)出線2隊(duì)出局!U23亞洲杯最新晉級(jí)形勢(shì):中國(guó)隊(duì)輸泰國(guó)=基本淘汰

1隊(duì)出線2隊(duì)出局!U23亞洲杯最新晉級(jí)形勢(shì):中國(guó)隊(duì)輸泰國(guó)=基本淘汰

侃球熊弟
2026-01-12 00:17:32
以色列在行動(dòng),伊朗導(dǎo)彈部隊(duì)指揮官遭刺殺,庫(kù)爾德武裝發(fā)起進(jìn)攻

以色列在行動(dòng),伊朗導(dǎo)彈部隊(duì)指揮官遭刺殺,庫(kù)爾德武裝發(fā)起進(jìn)攻

史政先鋒
2026-01-11 15:58:18
“死了么”APP創(chuàng)始人:開(kāi)發(fā)成本1000多元,團(tuán)隊(duì)系三個(gè)95后,計(jì)劃出售10%股份,估值已達(dá)到1000萬(wàn)元人民幣

“死了么”APP創(chuàng)始人:開(kāi)發(fā)成本1000多元,團(tuán)隊(duì)系三個(gè)95后,計(jì)劃出售10%股份,估值已達(dá)到1000萬(wàn)元人民幣

大風(fēng)新聞
2026-01-11 11:03:04
合川千人赴約殺豬飯后續(xù):女子闖大禍,原地嚇呆,文旅連夜下場(chǎng)

合川千人赴約殺豬飯后續(xù):女子闖大禍,原地嚇呆,文旅連夜下場(chǎng)

鋭娛之樂(lè)
2026-01-11 22:06:10
2026-01-12 08:16:49
MediaTea
MediaTea
專(zhuān)業(yè)的數(shù)字媒體、新媒體技術(shù)
1701文章數(shù) 72關(guān)注度
往期回顧 全部

科技要聞

“我們與美國(guó)的差距也許還在拉大”

頭條要聞

李獻(xiàn)林學(xué)習(xí)教育期間違規(guī)吃喝:5人喝4瓶酒 1人酒后死亡

頭條要聞

李獻(xiàn)林學(xué)習(xí)教育期間違規(guī)吃喝:5人喝4瓶酒 1人酒后死亡

體育要聞

U23國(guó)足形勢(shì):末輪不負(fù)泰國(guó)即確保晉級(jí)

娛樂(lè)要聞

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

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

外賣(mài)平臺(tái)"燒錢(qián)搶存量市場(chǎng)"迎來(lái)終局?

汽車(chē)要聞

2026款宋Pro DM-i長(zhǎng)續(xù)航補(bǔ)貼后9.98萬(wàn)起

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

游戲
教育
藝術(shù)
房產(chǎn)
親子

這款帥到掉渣的GBA神作《洛克人ZERO》,被模仿無(wú)數(shù)次仍是巔峰

教育要聞

1分鐘說(shuō)清!山西工程科技職業(yè)大學(xué)專(zhuān)業(yè)錄取線

藝術(shù)要聞

10位著名畫(huà)家的女性人物繪畫(huà),張張經(jīng)典!

房產(chǎn)要聞

66萬(wàn)方!4755套!三亞巨量房源正瘋狂砸出!

親子要聞

最近的孩子怎么都長(zhǎng)得這么著急?你不說(shuō),誰(shuí)知道他還是個(gè)寶寶?

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