基本概念
面向過程
- 是早期的一個(gè)編程概念,類似函數(shù),但是沒有返回值
- 具體做法:
- 把完成某個(gè)需求的所有步驟,從頭到尾 逐步實(shí)現(xiàn)
- 將某些功能獨(dú)立的代碼 封裝成一個(gè)又一個(gè) 函數(shù)
- 然后順序調(diào)用不同的函數(shù)
- 特點(diǎn):
- 注重 ** 步驟與過程,** 不注重職責(zé)分工
- 如果需求復(fù)雜,代碼會(huì)變得很復(fù)雜
- 開發(fā)復(fù)雜項(xiàng)目,沒有固定的套路,開發(fā)難度大
**面向?qū)ο?/p>
**
- 相較于函數(shù), 面向?qū)ο笫歉蟮姆庋b ,根據(jù)** 職責(zé)** 在一個(gè)對(duì)象中封裝多個(gè)方法
- 在完成某個(gè)需求前,首選確定 ** 職責(zé)** ,根據(jù)職責(zé)確定不同的對(duì)象,在對(duì)象內(nèi)部封裝不同的方法
- 最后讓不同的對(duì)象調(diào)用不同的方法
- 特點(diǎn):
- 注重 對(duì)象和職責(zé) ,不同的對(duì)象承擔(dān)不同的職責(zé)
- 更加適合對(duì)應(yīng)復(fù)雜的需求變化,專門應(yīng)對(duì)復(fù)雜項(xiàng)目開發(fā),提供固定套路
**類和對(duì)象
**
- 類 和 對(duì)象 是面向?qū)ο蟮膬蓚€(gè)核心概念
- 在程序開發(fā)中,先有 類 ,后有 對(duì)象
- 類
- 對(duì)一群具有相同 特征 或 行為的事物的一個(gè)統(tǒng)稱,是抽象的,不能直接使用
- 特征 即 屬性
- 行為 即 方法(函數(shù))
- 類相當(dāng)于做汽車的 圖紙 , 是一個(gè)模板, 而根據(jù)這個(gè) **模板 **做出來的具體物品就是 對(duì)象
- 三要素
- 類名 這類事物的名字 , 使用大駝峰命名法(HelloWorld)
- **屬性 **指這類事物的特征
- 方法 指這類事物具備的行為
- 對(duì)一群具有相同 特征 或 行為的事物的一個(gè)統(tǒng)稱,是抽象的,不能直接使用
- 對(duì)象
- **對(duì)象 **是根據(jù)類創(chuàng)建出來的一個(gè)具體存在,可以直接使用
- 根據(jù)類創(chuàng)建出來的對(duì)象,具備與類相同的 屬性 和 方法
**類和對(duì)象的關(guān)系
**
- 類是模板,對(duì)象 是根據(jù) **類 **這個(gè)模板創(chuàng)建出來的,先有類,后有對(duì)象
- 類 只有一個(gè),根據(jù)這個(gè)類創(chuàng)建的 對(duì)象 可以有多個(gè)
- 不同的對(duì)象之間,屬性可能會(huì)各有不同
- 類 中定義了什么樣的屬性和方法,對(duì)象中就是什么樣的屬性與方法
基礎(chǔ)語法
dir內(nèi)置函數(shù)
- 在 Python 中,對(duì)象幾乎無所不在,變更、數(shù)據(jù)、函數(shù)都是對(duì)象
- 使用內(nèi)置函數(shù)** dir** 傳入 ** 標(biāo)識(shí)符/數(shù)據(jù)** ,可以查看對(duì)象內(nèi)的所有屬性和方法
- 方法名 格式的方法是Python提供的 內(nèi)置方法/屬性
- 常見方法如下| 方法名 | 類型 | 作用 |
| ------------------ | ---------------- | ---------------------------------------- |
| new | 方法 | 創(chuàng)建對(duì)象時(shí),會(huì)被自動(dòng)調(diào)用 |
| init | 方法 | 對(duì)象被初始化時(shí),會(huì)被自動(dòng)調(diào)用 |
| del | 方法 | 對(duì)象被從內(nèi)存中銷毀時(shí),會(huì)被自動(dòng)調(diào)用 |
| str | 方法 | 返回對(duì)象的描述信息,print 函數(shù)輸出使用 |
示例
# 定義函數(shù),測(cè)試內(nèi)置方法
def demo():
pass
print(dir(demo))
輸出結(jié)果
定義簡(jiǎn)單類
- **面向?qū)ο?**是更大的封裝,在一個(gè)類中封裝多個(gè)方法,通過這個(gè)類創(chuàng)建的對(duì)象 可以直接使用這些方法
- 類中方法的定義,與之前定義函數(shù)時(shí),幾乎一樣,區(qū)別在于每一個(gè)參數(shù)必須是 self,** self 表示調(diào)用者本身的引用**
- 調(diào)用中對(duì)象中的方法時(shí),self 不需要傳遞
- 可以通過 self 調(diào)用對(duì)象的其它屬性或方法
示例
"""
需求:
定義一個(gè)狗類,狗有 吃骨頭,睡覺兩個(gè)方法
"""
class Dog:
# 第一個(gè)參數(shù) 必須是 self,表示調(diào)用者本身的引用
def eat(self):
print("狗狗要吃骨頭了...")
def sleep(self):
print("狗狗要睡覺了...")
# 定義對(duì)象調(diào)用方法
dog=Dog()
dog.eat()
dog.sleep()
# 定義第二個(gè) 狗對(duì)象
dog2=Dog()
dog2.eat()
dog2.sleep()
# dog 和dog2 是用同一個(gè)類 創(chuàng)建出來的,里面的方法和屬性是一樣的,但是對(duì)象的引用是不同的
print(dog)
print(dog2)
輸出結(jié)果
對(duì)象的初始化
- 當(dāng)使用 類名() 創(chuàng)建對(duì)象時(shí),會(huì) 自動(dòng) 執(zhí)行以下操作
- 為對(duì)象分配內(nèi)存空間
- 為對(duì)象的屬性設(shè)置初始值(即調(diào)用 init 方法)
- **init **是對(duì)象的內(nèi)置方法,專門用來定義一個(gè)類 具有哪些屬性的方法
**示例
**
class Dog:
def __init__(self,name):
print("開始初始化Dog的屬性...")
self.name=name
def eat(self):
print("%s 開始吃骨頭了..."%self.name)
def sleep(self):
print("%s 想要睡覺了..." %self.name)
# 定義對(duì)象,并為其屬性賦值
dog=Dog("小白")
dog.eat()
dog.sleep()
dog2=Dog("小黑")
dog2.eat()
dog2.sleep()
輸出結(jié)果
**內(nèi)置方法
**
- del 方法:當(dāng)一個(gè)對(duì)象被從內(nèi)存中銷毀時(shí),會(huì)自動(dòng)調(diào)用
- 應(yīng)用場(chǎng)景
- init 改造初始化方法,可以讓對(duì)象更加靈活
- del 如果希望對(duì)象在被銷毀前,再做一些事情,可以使用此方法
- 生命周期
- 一個(gè)對(duì)象從調(diào)用 類名() 創(chuàng)建,生命周期開始
- 一個(gè)對(duì)象的 del 方法一旦被調(diào)用,生命周期結(jié)束
- 在對(duì)象的生命周期內(nèi),可以訪問對(duì)象屬性,或者調(diào)用對(duì)象方法
- str 方法: 默認(rèn)打印 對(duì)象變量的引用內(nèi)存地址值, 如果希望使用 print 輸出對(duì)象變量時(shí),能夠打印 自定義的內(nèi)容 ,就可以利用 str 方法,該方法必須返回一個(gè)字符串
示例
class Dog:
def __del__(self):
print("小黑去輪回了......")
def __str__(self):
return "我是小黑的自定義打印內(nèi)容。。。"
dog=Dog()
print(dog)
print("---------------11111111111")
輸出結(jié)果
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
編程
+關(guān)注
關(guān)注
88文章
3634瀏覽量
93880 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4344瀏覽量
62839
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Python的面向對(duì)象編程詳解
一般編程可分為面向過程編程,和面向對(duì)象編程。Python的面向對(duì)象編程,與Java的
發(fā)表于 09-04 16:35
?589次閱讀
labview面向對(duì)象編程
點(diǎn)擊學(xué)習(xí)>>《龍哥手把手教你學(xué)LabVIEW視覺設(shè)計(jì)》視頻教程使用LabVIEW面向對(duì)象編程方法,對(duì)于大型測(cè)試應(yīng)用程序來講,面向對(duì)象相對(duì)于面向
發(fā)表于 11-24 11:01
3分鐘看懂Python面向對(duì)象
Python雖然是解釋型語言,但從設(shè)計(jì)之初就已經(jīng)是一門面向對(duì)象的語言,對(duì)于Python來說一切皆為對(duì)象。正因?yàn)槿绱耍?/div>
發(fā)表于 06-08 14:20
面向對(duì)象編程及其三大特性 精選資料分享
編程語言分為面向過程編程、函數(shù)式編程和面向對(duì)象編程。其實(shí)python就是一種面向對(duì)象編程,那么我
發(fā)表于 07-21 08:38
談?wù)?b class='flag-5'>面向對(duì)象編程
在工業(yè)自動(dòng)化領(lǐng)域,梯形圖邏輯仍然是最常用的編程語言之一,但對(duì)于更加復(fù)雜的控制對(duì)象,面向對(duì)象編程不失為一種高效率的方式。下面先來談?wù)?b class='flag-5'>面向對(duì)象編
發(fā)表于 09-08 07:47
請(qǐng)問python-樹莓派如何通過按鍵控制步進(jìn)電機(jī)正反轉(zhuǎn)?
步進(jìn)電機(jī)驅(qū)動(dòng)原理是什么?python-樹莓派如何通過按鍵控制步進(jìn)電機(jī)正反轉(zhuǎn)?
發(fā)表于 10-09 08:45
這可能是Python面向對(duì)象編程的最佳實(shí)踐
本節(jié)介紹了attrs和cattrs兩個(gè)庫,讓實(shí)現(xiàn)Python面向對(duì)象編程不再難。
利用Python和PyTorch處理面向對(duì)象的數(shù)據(jù)集
本篇是利用 Python 和 PyTorch 處理面向對(duì)象的數(shù)據(jù)集系列博客的第 2 篇。 如需閱讀第 1 篇:原始數(shù)據(jù)和數(shù)據(jù)集,請(qǐng)參閱此處。 我們?cè)诘?1 部分中已定義 MyDataset 類,現(xiàn)在
利用 Python 和 PyTorch 處理面向對(duì)象的數(shù)據(jù)集(2)) :創(chuàng)建數(shù)據(jù)集對(duì)象
本篇是利用 Python 和 PyTorch 處理面向對(duì)象的數(shù)據(jù)集系列博客的第 2 篇。我們?cè)诘?1 部分中已定義 MyDataset 類,現(xiàn)在,讓我們來例化 MyDataset 對(duì)象
Python中的類和對(duì)象詳解
Python 是一種面向對(duì)象的編程語言,它支持類和對(duì)象。類是一種用戶自定義的數(shù)據(jù)類型,用于定義對(duì)象的屬性和方法。
Python面向對(duì)象深化(下)
__call__ ?方法和可調(diào)用對(duì)象 凡是可以將 () 直接應(yīng)用到自身并執(zhí)行, 都稱為可調(diào)用對(duì)象. 注意: 可調(diào)用對(duì)象包括自定義的函數(shù)、Python 內(nèi)置函數(shù)、以及本節(jié)所講的實(shí)例
評(píng)論