python之初識物件導向

2021-10-08 20:23:14 字數 3651 閱讀 5751

2、什麼是物件導向程式設計

1、面向過程的程式設計思想

1.1、程式設計思想的定義

程式設計思想就是編寫程式的套路,與具體的技術點無關
1.2、面向過程的定義及優缺點
核心是過程二字,過程就是解決問題的步驟,也就是先幹什麼、再幹什麼、後幹什麼

過程的終極奧義就是將程式流程化

過程是"流水線",用來分步驟解決問題的

基於該思想編寫程式就好比在涉及一條條的流水線

優點:複雜的問題流程化、進而變得簡單化

缺點:所有環節耦合到一起,環環相扣,如果要修改某個環節,有可能會牽一髮而動全身,擴充套件性差

2、什麼是物件導向程式設計

2.1、物件導向程式設計的定義及優缺點

核心是物件二字,物件就是乙個用來盛放相關資料與相關功能的容器

物件的終極奧義就是將程式"整合"

物件是"容器",用來盛放資料與功能的

類也是"容器",該容器用來存放同類物件共有的資料與功能

程式=資料+功能

優點:程式解耦合強,擴充套件性高

缺點:比面向過程更複雜

2.2、定義類
類是物件相似資料與功能的集合體,定義類申請記憶體空間,把物件之間相同的資料與功能存起來

所以類體中最常見的是變數與函式的定義,但是類體其實是可以包含任意其他**的

注意:類體**是在類定義階段就會立即執行,會產生類的命名空間

class

dog:

name =

'小白'

defsay

(self)

:print

('我的名字是<%s>'

%(self.name)

)print

('我會執行'

)# 在沒有呼叫類時也會執行

print

(dog.__dict__)

屬性訪問的語法

類屬性操作:類與物件都可以通過.來訪問屬性完成增刪改查的操作

1、訪問資料屬性

print

(dog.name)

# dog.__dict__['name']

訪問類的函式屬性:它就是乙個普通函式,該傳幾個引數就傳幾個引數,沒有自動傳參的說法

2、訪問函式屬性

print

(dog.say)

# dog.__dict__['say']

# 為當前類新增乙個x的屬性

dog.x =

1111

# 相當於dog.__dict__['x'] = 111,使用dog.__dict__['x']=111會報錯

print

(dog.__dict__)

2.3、呼叫類產生物件
呼叫類來產生物件,呼叫類的過程又稱之為例項化

呼叫類的本質:就是產生乙個與類相關聯子空間

dog1_obj = dog(

)dog2_obj = dog(

)dog3_obj = dog(

)print

(dog1_obj.__dict__)

# {}

print

(dog2_obj.__dict__)

# {}

print

(dog3_obj.__dict__)

# {}

為物件定製自己獨有的屬性

dog1_obj.color =

'black'

print

(dog1_obj.__dict__)

# 物件屬性操作:物件.屬性,會先從物件自己的空間裡找,沒有話去類中找

print(id

(dog.name)

)# 1623791477224

print(id

(dog1_obj.name)

)# 1623791477224

print(id

(dog2_obj.name)

)# 1623791477224

print(id

(dog3_obj.name)

)# 1623791477224

修改類的資料屬性,所有物件都會跟著改

dog.name =

'小黑'

print

(dog1_obj.name)

# 小黑

print

(dog2_obj.name)

# 小黑

print

(dog3_obj.name)

# 小黑

修改物件的資料屬性,只會當前物件的屬性跟著改

dog1_obj.name =

'小黑'

print

(dog.name)

# 小白

print

(dog1_obj.name)

# 小黑

print

(dog2_obj.name)

# 小白

print

(dog3_obj.name)

# 小白

類中的定義的函式屬性,類可以呼叫但就是乙個普通函式,而類中函式通常都是為物件準備的,也就是說是給物件用的,如何給物件用?

需要繫結給物件

dog1_obj.say(

)dog.say(dog1_obj)

dog2_obj.say(

)dog.say(dog2_obj)

dog3_obj.say(

)dog.say(dog3_obj)

2.4、__init__的使用
class

person

:def

__init__

(self,name,age,gender)

: self.name = name

self.age = age

self.gender = gender

# 該函式內可以有任意**,但是該函式不能返回非none值

defrunning

(self)

:print

('%s正在跑步'

% self.name)

obj1 = person(

'allen',18

,'male'

)# person.__init__(空物件,'allen',18,'male')

obj2 = person(

'lily',20

,'female'

)# person.__init__(空物件,'lily',20,'female')

print

(obj1.running)

# >

print

(obj2.running)

# >

呼叫類的過程又稱之為例項化,發生了三件事

1、先產生乙個空物件

2、python會自動呼叫類中的__init__方法然將空物件已經呼叫類時括號內傳入的引數一同傳給__init__方法

3、返回初始完的物件

2.5、__init__的總結
1、會在呼叫類時自動觸發執行,用來為物件初始化自己獨有的資料

2、__init__內應該存放是為物件初始化屬性的功能,但是是可以存放任意其他**,想要在類呼叫時就立刻執行的**都可以放到該方法內

3、__init__方法必須返回none

物件導向之初識類與物件

在一片蒼茫的草地上生活著一群無憂無慮的小豬,他們有著粉粉嫩嫩或者黑不溜秋的 圓圓的鼻孔 大大的耳朵,非常惹人喜愛。定睛一看,有的豬正在舒適的窩裡睡覺,有的正在夕陽下奔跑 國產的豬就是勤快 有的正為豬生大事而在談戀愛。那麼問題來了,這跟類和物件有什麼關係呢?對,你可能猜到了,我們將這群小豬抽象成為豬類...

python 初識物件導向

面向過程 優點是 極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊 即可。缺點是 一套流水線或者流程就是用來解決乙個問題,牽一髮而動全身。應用場景 一旦完成基本很少改變的場景,著名的例子有linux核心,git,以及apache http server等物件導向 優點 解決了程式的擴充套件性...

Python初識物件導向

面向過程的聖墟設計的核心是過程 流水線式思維 過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麼時候處理什麼東西 優點是 極大的降低了寫程式的複雜度,只需要順著執行步驟,堆疊 即可。缺點是 一套流水線或者流程就是用來解決乙個問題,牽一髮而東全身 應用場景 一旦完成基本很少改...