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

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

Python 編程B18:OOP(一)

0
分享至

第十一章面向?qū)ο缶幊袒A(chǔ)

Python 是一種典型的面向?qū)ο缶幊陶Z言(OOP, Object-Oriented Programming)。從數(shù)據(jù)到函數(shù),再到對象,是程序設(shè)計思想的自然演進的結(jié)果。

在面向?qū)ο缶幊讨,我們不再僅僅編寫函數(shù)處理數(shù)據(jù),而是讓“對象”同時擁有屬性(數(shù)據(jù))與方法(行為),使程序組織更加清晰、可復(fù)用、可擴展。

學(xué)習(xí)目標:

(1)理解類與對象的基本概念與關(guān)系。

(2)掌握類的定義、實例化、屬性與方法的使用。

(3)理解封裝機制與信息隱藏的意義。

(4)了解繼承與方法重寫的基本思想。

(5)理解多態(tài)與抽象類的設(shè)計動機。

(6)能編寫簡單的面向?qū)ο蟪绦,如學(xué)生管理、圖形建模或 AI 模型結(jié)構(gòu)原型等。

11.1 面向?qū)ο缶幊谈耪?/strong>

隨著程序規(guī)模擴大,僅依靠變量、函數(shù)和基本數(shù)據(jù)結(jié)構(gòu)(列表、字典等)難以管理復(fù)雜邏輯。OOP 提供了一種更高層次的建模方式,使我們能夠用“類”來描述事物,用“對象”來表達實際存在。

對象具有兩類基本特征:

? 屬性(Attributes):描述是什么或擁有什么。

? 方法(Methods):描述對象能做什么或如何行動。

在 OOP 中,我們關(guān)注的不僅是數(shù)據(jù)本身,更關(guān)注對象的職責(zé)與行為。

OOP 的四大核心特性:

? 抽象(Abstraction)

關(guān)注“做什么”,而非“怎么做”。屏蔽內(nèi)部實現(xiàn),只暴露必要接口。

? 封裝(Encapsulation)

將數(shù)據(jù)與操作數(shù)據(jù)的方法打包為整體,封裝是實現(xiàn)抽象的重要手段,可使得對象成為可復(fù)用、可維護的模塊。

? 繼承(Inheritance)

代碼復(fù)用與層次化建模,通用的共性行為可抽象到基類,具體差異由子類實現(xiàn)。

? 多態(tài)(Polymorphism)

同一接口,不同實現(xiàn)。同一操作作用于不同類型的對象時,能夠自動觸發(fā)適合該類型的具體行為。

OOP 通過抽象、封裝、繼承與多態(tài)四大特性,將復(fù)雜系統(tǒng)分解為可理解、可復(fù)用、可擴展的模塊,提升代碼的結(jié)構(gòu)性與可維護性。

掌握 OOP 意味著擁有拆解大型問題、構(gòu)建長期價值系統(tǒng)的核心能力,是現(xiàn)代軟件工程的核心思維方式。

11.2 類與對象

11.2.1 類與對象的基本概念

類(Class):對某類事物的抽象描述,是對象的“模板”。

對象(Object / Instance):類的具體存在,是實際可用的實體。

例如:

類:Student

對象:某個具體學(xué)生,如“艾婉婷”

Python “一切皆對象”,數(shù)值、字符串、函數(shù)、模塊甚至類本身,都是對象。

示例:

# 輸出:汪汪!

11.2.1.1類的定義

類通過 class 關(guān)鍵字定義:

    # 類體內(nèi)容:類變量、實例變量以及方法等定義語句

類名推薦使用“大寫開頭的駝峰命名法”,如 Student、Teacher、AIModel 等。

類體不能為空。如果在定義類時,尚未設(shè)計好類的屬性和方法,可使用 pass 占位:

    pass

11.2.1.2實例化與初始化方法

利用定義好的類創(chuàng)建對象的過程稱為“實例化”:

變量名 = 類名(參數(shù)列表)

括號中的參數(shù)會傳遞給類的初始化方法 __init__()。

要注意的是:

? __init__ 是初始化方法(initializer),在對象創(chuàng)建后運行,用于設(shè)置實例狀態(tài);

? 真正的構(gòu)造(allocation)由 __new__ 完成,通常不需要重寫除非進行自定義內(nèi)存分配或不可變類型初始化。

示例:

# 輸出:艾婉婷 的成績是 95 分。

不是關(guān)鍵字,而是約定俗成的命名,表示當(dāng)前實例,會由 Python 自動傳入,用于訪問實例的屬性與方法。

11.2.2 實例屬性與類屬性

類的屬性可分為兩類:類屬性和實例屬性。

11.2.2.1類屬性

類屬性是在類體中直接定義的變量,位于類的頂層作用域內(nèi)。

比如:

    shared = []

類屬性屬于類本身,所有該類的實例共享同一份數(shù)據(jù)。

(1)可以通過 類名.類屬性名 直接訪問或修改類屬性。

(2)若通過 實例.類屬性名 = 值 形式賦值,并不會修改類屬性,而是在該實例上創(chuàng)建一個同名的實例屬性,從而“屏蔽”掉類屬性。

(3)若類屬性是可變對象(如 list、dict 等),所有實例共享同一個對象。若某一實例中修改該可變對象會影響所有實例。

示例(警示):

print(x2.shared)  # 會看到 [1]

若需每個實例有獨立的可變數(shù)據(jù),應(yīng)在 __init__() 中創(chuàng)建實例屬性。

11.2.2.2實例屬性

實例屬性通常在初始化方法 __init__() 中定義。

 

  = 
<值>
   


實例屬性用于描述實例的個性化數(shù)據(jù),每個實例都有自己獨立的副本。

(1)可以通過 實例.屬性名 訪問屬性。

(2)當(dāng)通過 實例.屬性名 = 值 進行賦值時,若該實例屬性已存在則修改,若不存在則動態(tài)創(chuàng)建新的實例屬性(即使存在同名的類屬性)。

示例:

print(Robot.category)         # 輸出: AI (類屬性本身不變)

11.2.2.3 屬性查找順序

屬性查找的順序是:

實例屬性 → 類屬性 → 基類(按 MRO 順序)→ object

若使用多重繼承,基類的查找順序由類的 MRO(Method Resolution Order,方法解析順序) 決定。

11.2.3 實例方法、類方法與靜態(tài)方法

類中的方法類型與第一個參數(shù)有關(guān)。

11.2.3.1實例方法

實例方法至少包含一個參數(shù),通常命名為 self,指向調(diào)用該方法的實例。

    # self 指向?qū)嵗旧?/code>

實例方法通常通過對象實例調(diào)用,例如 obj.method()。主要用于操作對象的狀態(tài)。

示例:

print(c1.count)

實例方法也可以通過類來調(diào)用,但需要顯式傳入實例,比如:

Counter.increment(c1) 

這在調(diào)試或元編程中偶爾有用,但不推薦在常規(guī)代碼中使用。

11.2.3.2類方法

類方法使用 @classmethod 裝飾,其第一個參數(shù)通常命名為 cls,指向類對象本身。

    # cls 指向類對象本身

類方法是作用于類本身而非具體實例的方法。通過 cls,類方法可以訪問和修改類屬性,也可以調(diào)用其他類方法。

類方法既可以通過類名調(diào)用,也可以通過實例調(diào)用。后者會將類作為第一個參數(shù)自動傳入,但語義上應(yīng)通過類調(diào)用以體現(xiàn)“操作類”的意圖。

示例:

Counter.show_total()  # 當(dāng)前計數(shù)器數(shù)量:5

類方法常用于操作類級狀態(tài)、實現(xiàn)備用構(gòu)造器或工廠方法。

p = Person.from_string("艾婉婷,18")

11.2.3.3靜態(tài)方法

靜態(tài)方法使用 @staticmethod 裝飾,既沒有 self 也沒有 cls 參數(shù),本質(zhì)上是一個與類邏輯相關(guān)聯(lián)的普通函數(shù)。

    ...

靜態(tài)方法既可以通過類名直接調(diào)用,也可以通過實例調(diào)用,但其行為與調(diào)用者無關(guān)。

示例:

print(mytool.add(5,3))      # 通過實例調(diào)用

靜態(tài)方法通常用于工具函數(shù)或與類概念相關(guān)但不訪問類/實例狀態(tài)的操作。

11.2.4 魔術(shù)方法

(Special/Magic Methods)以雙下劃線 __ 包圍,例如 __init__ 初始化、__str__ 字符串顯示、__eq__ 比較運算、__len__ 長度、__add__ 加法、__iter__ 迭代支持,等等。

通過實現(xiàn)這些方法,自定義對象可像內(nèi)建類型一樣被操作與組合。

示例:

print(p1 == p2)    # 調(diào)用 __eq__()

輸出:

True

魔術(shù)方法支持運算符重載、屬性訪問、迭代和上下文管理等 Python 操作語義下的行為。

11.2.5 類與對象綜合示例與應(yīng)用

例 11.2.1:溫度轉(zhuǎn)換器類

項目描述:設(shè)計一個類,實現(xiàn)攝氏度與華氏度之間的轉(zhuǎn)換功能。

t.show()

輸出:

36.5°C = 97.7°F

該示例演示了如何在類中定義屬性與方法,讓對象自身具備轉(zhuǎn)換能力。

例 11.2.2:AI 模型類

項目描述:定義一個 AIModel 類,用于表示人工智能模型的基本信息與推理行為。

model.predict("[圖片數(shù)據(jù)...]")

輸出:

[ImageNetClassifier v1.2] 正在處理輸入數(shù)據(jù):[圖片數(shù)據(jù)...]

通過類的封裝,可以方便地管理 AI 模型的元數(shù)據(jù)與方法接口,這是 AI 系統(tǒng)中最常見的對象化設(shè)計模式之一。

例 11.2.3:任務(wù)執(zhí)行計數(shù)器

項目描述:實現(xiàn)一個計數(shù)器類,用于統(tǒng)計任務(wù)的執(zhí)行次數(shù)。

TaskCounter.show_total()

輸出:

已執(zhí)行任務(wù)總數(shù):2

此例展示了類屬性與類方法的結(jié)合使用,非常適合在批量任務(wù)調(diào)度或日志統(tǒng)計中使用。

小結(jié)

本次課介紹了面向?qū)ο缶幊痰幕舅枷肱c關(guān)鍵構(gòu)成要素。類是對事物的抽象描述,對象是類的實例。通過 __init__ 方法可初始化實例,通過實例屬性與類屬性區(qū)分“個體數(shù)據(jù)”和“共享數(shù)據(jù)”,通過實例方法、類方法與靜態(tài)方法實現(xiàn)不同的職責(zé)分工。魔術(shù)方法使類的行為更符合 Python 的對象協(xié)議。

類與對象為程序提供了新的抽象層,使我們能夠以“事物”的思維組織邏輯。

下一課將進一步探討封裝、繼承特性,使對象系統(tǒng)形成結(jié)構(gòu)化、可復(fù)用的層次體系。

點贊有美意,贊賞是鼓勵

特別聲明:以上內(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)推薦
熱點推薦
廣東108-78遼籃!球員評分:3人滿分,3人良好,1人不合格

廣東108-78遼籃!球員評分:3人滿分,3人良好,1人不合格

多特體育說
2026-01-11 21:39:19
蔬菜市場遇冷,這3種菜便宜卻沒人買,攤販:現(xiàn)在老百姓太精明了

蔬菜市場遇冷,這3種菜便宜卻沒人買,攤販:現(xiàn)在老百姓太精明了

三農(nóng)雷哥
2026-01-11 17:28:07
萬萬沒想到!李晨會因為老人味登上熱搜,感覺他這輩子很難結(jié)婚了

萬萬沒想到!李晨會因為老人味登上熱搜,感覺他這輩子很難結(jié)婚了

樂悠悠娛樂
2025-12-02 11:01:18
打平就出線!U23國足成亞洲杯大黑馬:賽后澳大利亞球員低下頭顱

打平就出線!U23國足成亞洲杯大黑馬:賽后澳大利亞球員低下頭顱

足球大腕
2026-01-11 22:02:43
羽壇名將李宗偉:36歲患癌喉嚨全爛,花近1000萬續(xù)命,現(xiàn)狀如何?

羽壇名將李宗偉:36歲患癌喉嚨全爛,花近1000萬續(xù)命,現(xiàn)狀如何?

豐譚筆錄
2026-01-07 10:59:38
遼寧78-108廣東1喜3憂!小將罕見暴走,姜宇星仍崩,2將難打強隊

遼寧78-108廣東1喜3憂!小將罕見暴走,姜宇星仍崩,2將難打強隊

籃球資訊達人
2026-01-11 22:32:21
2026年春節(jié),要暖到離譜?大年初一撞上七九,老輩人:60年頭回見

2026年春節(jié),要暖到離譜?大年初一撞上七九,老輩人:60年頭回見

叮當(dāng)當(dāng)科技
2026-01-07 13:58:49
愛奇藝、騰訊、優(yōu)酷三大平臺“王炸劇”紛紛登場,誰能登頂劇王?

愛奇藝、騰訊、優(yōu)酷三大平臺“王炸劇”紛紛登場,誰能登頂劇王?

鄉(xiāng)野小珥
2026-01-12 05:57:22
乒球世界排名更新:朱雨玲第5獲28萬,陳幸同重返第3

乒球世界排名更新:朱雨玲第5獲28萬,陳幸同重返第3

民哥臺球解說
2026-01-12 05:20:12
氧氣要火了?科學(xué)家發(fā)現(xiàn)寶藏:吸100%純氧3個月,生理倒拔20歲

氧氣要火了?科學(xué)家發(fā)現(xiàn)寶藏:吸100%純氧3個月,生理倒拔20歲

科學(xué)認識論
2026-01-11 17:13:05
開國大將次子羅宇,89年攜香港女星叛逃出國,晚年在美國黯然離世

開國大將次子羅宇,89年攜香港女星叛逃出國,晚年在美國黯然離世

搜史君
2025-12-31 13:00:10
形勢突變!別了,北約!美國這次玩真的!

形勢突變!別了,北約!美國這次玩真的!

李榮茂
2026-01-12 07:03:16
哈梅內(nèi)伊開始大范圍斷網(wǎng),革命衛(wèi)隊將與中俄軍演,伊朗進入關(guān)鍵期

哈梅內(nèi)伊開始大范圍斷網(wǎng),革命衛(wèi)隊將與中俄軍演,伊朗進入關(guān)鍵期

溫讀史
2026-01-10 07:33:53
拉菲尼亞雙響鎖定勝局,巴薩3-2皇馬衛(wèi)冕西超杯

拉菲尼亞雙響鎖定勝局,巴薩3-2皇馬衛(wèi)冕西超杯

浮萍足球
2026-01-12 07:24:06
廣西又有2名干部向紀委投案自首!

廣西又有2名干部向紀委投案自首!

嶺南美玉
2026-01-12 00:08:15
我只認出了萬梓良 ,你們呢 ?

我只認出了萬梓良 ,你們呢 ?

小椰的奶奶
2026-01-12 01:45:27
為保護馬杜羅夫妻戰(zhàn)死的古巴桑切斯上校,被曝光家人都住在美國!

為保護馬杜羅夫妻戰(zhàn)死的古巴桑切斯上校,被曝光家人都住在美國!

阿龍聊軍事
2026-01-09 20:20:47
伊朗政府宣布全國哀悼三天

伊朗政府宣布全國哀悼三天

界面新聞
2026-01-12 07:03:21
沒想到竟然這么多工作需要保密的!網(wǎng)友:不讓看非看被一槍斃了

沒想到竟然這么多工作需要保密的!網(wǎng)友:不讓看非看被一槍斃了

另子維愛讀史
2025-12-08 20:58:22
汪小菲為什么發(fā)瘋,發(fā)瘋背后是流量斷崖式的下跌

汪小菲為什么發(fā)瘋,發(fā)瘋背后是流量斷崖式的下跌

調(diào)侃國際觀點
2026-01-11 18:41:24
2026-01-12 08:04:49
MediaTea
MediaTea
專業(yè)的數(shù)字媒體、新媒體技術(shù)
1701文章數(shù) 72關(guān)注度
往期回顧 全部

科技要聞

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

頭條要聞

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

頭條要聞

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

體育要聞

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

娛樂要聞

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

財經(jīng)要聞

外賣平臺"燒錢搶存量市場"迎來終局?

汽車要聞

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

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

本地
手機
教育
健康
軍事航空

本地新聞

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

手機要聞

真我 Neo8 參數(shù)曝光,驍龍 8 Gen5 、8000mAh電池

教育要聞

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

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

軍事要聞

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

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