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