python面向对象学习_Python 初识面向对象#学习猿地
> 面向對象編程——Object Oriented Programming,簡稱`OOP`,是一種**以對象為中心**的程序設計思想。
>
> 面向過程編程——Procedure Oriented Programming,簡稱`POP`,是一種**以過程為中心**的程序設計思想。
## 理解面向過程與面向對象思想
大家先思考一個問題:把大象裝進冰箱,需要幾步?
小品給出的答案:三步
第一步:打開冰箱門
第二步:把大象裝進去
第三步:關上冰箱門
##### 用面向過程去理解
> 上面給出的答案就是面向過程的,遇到問題后,分析解決問題的步驟,然后一步步去實現
##### 用面向對象去理解
> 是通過分析問題中需要的抽象模型,然后更具需要的功能分別去創建模型對象,最終由模型對象來完成程序
首先面向對象要解決這個問題,需要先建立出抽象模型,比如:打開冰箱門和關閉冰箱門,這都屬于一個冰箱的功能,大象走進去,這就是大象的功能。到此時我們就出現了兩個抽象模型,一個是冰箱,一個是大象。
冰箱具有 打開和關閉的功能,大象具有走路的能力。
分析到這里,就是面向對象的思想,具體完成的話,就是去創建冰箱和大象這兩個對象,最終完成這個程序
冰箱對象-開門,大象對象-走進冰箱,冰箱對象-關門
再思考一個問題,想吃清蒸魚怎么辦?
面向過程:
1. 買魚,買料
2. 殺魚和清理,并且腌制
3. 放鍋燒水
4. 把魚放進去,開始蒸
5. 十分鐘后開蓋,把魚端出來,澆汁
面向過程中想完成這個愿望,需要一步一步的去執行。
面向對象:
需要一個對象:大廚
告訴大廚,我想吃清蒸魚
面向對象就是調用對象去解決問題,具體的對象如何去解決呢?
大廚這個對象肯定也是一步步完成。但是對于我來說,就是調用了對象。而對象去完成這個過程。
當然了最終面向對象中是有面向過程的體現的。
### 面向過程和面向對象的區別和優缺點?
#### 一,面向過程
>? 面向過程的核心是過程,過程就是指解決問題的步驟。
優缺點:
+ 優點: 將負責的問題流程化,進而實現簡答化
+ 缺點:擴展性差(更新,維護,迭代)
總結:在去完成一些簡單的程序時,可以使用面向過程去解決。但是如果有復雜的程序或任務,而且需要不斷的進行迭代和維護,那么肯定是優先選擇面向對象的編程思想
#### 二,面向對象
> 面向對象的核心是對象,是一個特征和功能的綜合體
優缺點:
+ 優點:可擴展性高
+ 缺點:編程復雜度相對面向過程高一些。指的是計算機在執行面向對象的程序時的性能表現
### 后面如何去學習面向對象編程?
1. 理解面向對象編程的思想
2. 學習面向對象編程的語法
### 認識類與對象
類:類是對象的一個抽象的概念
對象(實例):對象就是由類的創建的實例
類和對象的關系就是 模具與鑄件的關系
1. 類是由對象總結而來的,總結的這個過程叫做抽象
2. 對象是由類具體實施出來的,這個過程叫做實例化
如果你現在有點迷糊,那你想一想,
+ 水果是一個對象還是一個類?
+ 汽車是一個對象還是一個類?
+ 手機是一個對象還是一個類?
再來想一個問題,我現在給大家上課,用的是一個筆記本電腦,
請問我當前正在使用的這個筆記本電腦是一個對象還是一個類?
筆記本電腦特征:金屬外殼,優美的外觀
筆記本電腦功能:給大家制作課程,編輯代碼,聽音樂。。。
## 面向對象編程的基本實現
> 如果需要實例一個對象,那么需要先抽象一個類
例如需要創建一個汽車對象
首先需要抽象一個汽車類:汽車類就相當于一個設計圖紙一樣。
由這個設計圖紙去創建(實例)出來的真實汽車就是一個對象
如何創建一個類,通過class關鍵字來定義一個類
示例:
```python
# 定義一個汽車的類
class Cart():
pass
'''
類名的書寫規范,建議使用駝峰命名法
大駝峰:MyCar XiaoMi
小駝峰:myCar xiaoMi
'''
```
類中需要聲明什么內容?
```
一個類有特征和功能兩個內容組成:
特征就是一個描述:顏色:白色,品牌:奧迪,排量:2.4 。。。
功能就是一個能力:拉貨,帶美女兜風。。。。
特征在編程中就是一個變量,在類中稱為 屬性
功能在編程中就是一個函數,在類中稱為 方法
類中屬性一般定義在前面,方法定義在后面
```
示例:
```python
# 定義一個汽車的類
class Cart():
# 屬性 ==> 特征 ==> 變量
color = '白色'? # 表示顏色屬性
brand = '奧迪'? # 表示品牌屬性
pailiang = 2.4 # 表示排列屬性
# 方法 ==> 功能 ==> 函數
def luohuo(self):
print('小汽車能拉貨')
def doufeng(self):
print('小汽車能兜風')
def bamei(self):
print('帶妹子去嗨。。。')
```
如何通過類實例化對象并使用?
```python
# 如何去使用這個類?
# 通過類實例化一個對象
aodiobj =? Cart()
# print(aodiobj,type(aodiobj))
# <__main__.cart object at>
# 調用對象的方法
aodiobj.bamei()
# 獲取對象的屬性
print(aodiobj.brand)
```
---
### 成員屬性和成員方法的操作
#### 對象操作成員
```
成員屬性:
訪問:? 對象.成員屬性名
修改:? 對象.成員屬性名法 = 新值。(此時等于給這個對象創建了一個自己的屬性)
添加:? 對象.新成員屬性 = 值 (此時是給這個對象自己新建了一個屬性)
刪除:? del 對象.成員屬性 (注意:只能刪除這個對象自己的屬性)
成員方法:
訪問:? 對象.成員方法名()
修改:? 對象.成員方法名 = func(此時等于給這個對象創建了一個自己的方法)
添加:? 對象.方法名 = func (此時是給這個對象自己新建了一個方法)
刪除:? del 對象.方法名 (注意:只能刪除這個對象自己的方法)
```
#### 類操作成員(不推薦)
```
成員屬性:
訪問:? 類名.成員屬性名
修改:? 類名.成員屬性名法 = 新值。(此時通過這個類創建的對象都具有這個屬性)
添加:? 類名.新成員屬性 = 值 (此時通過這個類創建的對象都具有這個屬性)
刪除:? del 類名.成員屬性 (注意:刪除這個類的屬性后,這個類創建的對象也沒有這幾個屬性了)
成員方法:
訪問:? 類名.成員方法名()
修改:? 類名.成員方法名 = func(此時通過類創建的對象都被修改)
添加:? 類名.方法名 = func (此時通過類創建的對象都被修改)
刪除:? del 類名.方法名 (注意:此時通過類創建的對象都被修改)
```
#### 總結
+ 一個類可以實例化出多個對象,每個對象在內存中都獨立存在的
+ 當通過類實例化對象時,并不會把類中的成員復制一份給對象,而去給對象了一個引用
+ 訪問對象成員的時候,如果對象自己沒有這個成員,對象會向實例化它的類去查找
+ 對象成員的添加和修改,都只會影響當前對象自己,不會影響類和其它對象
+ 刪除對象的成員時,必須是該對象自己具備的成員才可以,不能刪除類中引用的成員
+ 對類的成員操作,會影響通過這個類創建的對象,包括之前創建的。
----
#### `__del__`析構方法
```
__del__ 析構方法
觸發機制:析構方法會在對象被銷毀時自動觸發
作用:關閉一些開發的資源
注意:是對象被銷毀時觸發了析構方法,而不是析構方法銷毀了對象
對象會在哪些情況下被銷毀?
1。 當程序執行完畢,內存中所有的資源都會被銷毀釋放
2。 使用 del 刪除時
3。 對象沒有被引用時,會自動銷毀
```
示例:
> 定義一個類,完成一個日志的記錄
>? ? 調用這個對象的時候,傳遞一個日志信息
>? ? 這個對象會創建一個文件,開始寫入,并在最后關閉這個文件
```python
import time
class writeLog():
# 成員屬性
# 文件的路徑
fileurl = './'
# 日志文件的名稱
filename = '2019-09-19'
# 初識化? 打開文件
def __init__(self):
#完成文件的打開
print('初始化方法觸發類。完成文件的打開')
self.fileobj = open(self.fileurl+self.filename,'a+',encoding='utf-8')
# 寫日志的方法
def log(self,s):
print(f'把日志:{s} 寫入文件中')
# 析構方法
def __del__(self):
print('析構方法觸發了,關閉打開的文件')
# 在對象被銷毀時,關閉在初始化方法中打開的文件對象
self.fileobj.close()
```
掌握學習方法,不如會彎道超車!
學習猿地:成就自己的只需一套精品!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python面向对象学习_Python 初识面向对象#学习猿地的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 研报:新能源车将持续增长 建议关注比亚迪
- 下一篇: python输出数字方阵_在python