python極簡教程07:封裝、多型和繼承 - IT人
文章推薦指數: 80 %
測試奇譚,BUG不見。
這一場主講python的物件導向部分——封裝、多型和繼承。
目的:掌握Python物件導向的三個核心概念。
封裝01 什麼是封裝?
Togglenavigation
IT人
IT人
python極簡教程07:封裝、多型和繼承
測試奇譚發表於
2022-01-17
Python
測試奇譚,BUG不見。
這一場主講python的物件導向部分——封裝、多型和繼承。
目的:掌握Python物件導向的三個核心概念。
封裝
01什麼是封裝?
封裝的目的是,保護隱私。
通俗的講:不想讓別人知道你的東西。
於是,便有了兩個概念:普通屬性(變數)和私有屬性(變數)。
02為什麼要用封裝?
當你不希望外界可以直接修改一些資料時。
比如使用者的身份證號等資訊屬於使用者的隱私,肯定不能直接暴露給外界直接訪問或修改,那麼就不能把它作為普通屬性,應該作為私有屬性。
03怎麼使用封裝?
看下面這個例子就夠了。
#!/usr/bin/python
#-*-coding:utf-8-*-
classUser:
def__init__(self,name,id_card):
#普通屬性
self.name=name
#私有屬性(雙下劃線)
self.__id_card=id_card
defget_id_card(self):
returnself.__id_card
classStudent(User):
definit(self,name,id_card):
#普通屬性
self.name=name
#私有屬性
self.__id_card=id_card
#例項化一個User類
user=User('張三',511011199505050101)
stu=Student('李四',511011199505050808)
#print(user.__id_card)
#不能直接訪問私有屬性,會報錯:AttributeError:'User'objecthasnoattribute'__age'
print(user.get_id_card())
#可以通過成員方法去訪問私有屬性
print(user._User__id_card)
#也可以通過“_類名__私有屬性名”進行訪問
多型
01什麼是多型?
多型指同一個實體同時具有多種形式。
它是物件導向程式設計(OOP)的一個重要特徵。
同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。
多型一般要通過繼承和重寫方法去實現。
太難理解?
說簡單點:一類事物(動物)有多種形態(貓,狗,豬等)。
02有什麼用?
增加了程式的靈活性和擴充套件性,不論物件怎麼變,呼叫方式不變。
太難理解?
那先了解下Python的多型實現,再來理解。
首先,Python的多型是基於鴨子型別實現。
什麼是鴨子型別?
如果一種動物只要行為有相似性,那麼我們就可以認為是鴨子。
比如:鴨子會走路和游泳,是鴨子;人也會走路和游泳,也是“鴨子”
classduck():
defwalk(self):
print('Iwalk,iamaduck')
defswim(self):
print('iswim,iamaduck')
classperson():
defwalk(self):
print('iwalklikeaduck')
defswim(self):
print('iswimlikeaduck')
defwatch_duck(a):
a.walk()
a.swim()
small_duck=duck()
watch_duck(small_duck)
#Iwalk,iamaduck
#iswim,iamaduck
duck_like_man=person()
watch_duck(duck_like_man)
#iwalklikeaduck
#iswimlikeaduck
watch_duck接收這個類的物件,但並沒有檢查物件的型別,便直接呼叫物件的walk和swim方法。
多型的靈活性和擴充套件性,便在於它關注的是呼叫物件如何被使用,而並不關注物件本身是什麼。
即,我只關心你是否會走路和游泳,而不關心你究竟是誰。
說回靈活性和擴充性。
當你再想增加一個類,比如狗,它也會走路和游泳。
你只需要增加一個Dog類就可以了。
classDog():
defwalk(self):
print('iwalklikeaduck')
defswim(self):
print('iswimlikeaduck')
繼承
01繼承和過載
什麼是繼承?
動物需要吃和喝,貓繼承自動物,則貓會吃和喝。
什麼是過載?
動物需要吃和喝,貓繼承自動物,則貓會吃和喝,但是貓喝水是用舔的,因此需要特殊處理(過載)一下。
classAnimal:
defeat(self):
print("animaleat")
defdrink(self):
print("animaldrink")
classCat(Animal):
defdrink(self):
print("catdrinkbylick")
cat=Cat()
cat.eat()
cat.drink()
02多繼承
什麼是多繼承?
小花是一個大學生(繼承自學生),在校期間,她兼職做家教(繼承自老師),於是,小花有兩個能力(學習和教書)。
繼承順序(MRO查詢)
Python支援多繼承,但是有繼承順序:
菱形繼承【類似廣度優先查詢】
classD:
defget(self):
print("I'mD")
classB(D):
pass
classC(D):
defget(self):
print("I'mC")
classA(B,C):
pass
a=A()
a.get()
#I'mC
樹型繼承【類似深度優先查詢】
classO:
defget(self):
print("I'mO")
classP:
defget(self):
print("I'mP")
classZ(O):
pass
classY(P):
pass
classX(Z,Y):
pass
x=X()
x.get()
#I'mO
Python用C3演算法處理多繼承問題,我們可以用_mro_來檢視繼承順序。
print(A.__mro__)
#(
相關文章
要不要學Python?如何快速學Python?
2022-01-14
Python
Python技術分享:Python學習的一些小技巧!
2022-01-14
Python
中國式報表搞不定?教程來了!
2022-01-14
python極簡教程06:生成式和裝飾器
2022-01-14
Python
MicroPython8266配置
2022-01-14
Python
Python與Javascript相互呼叫超詳細講解(2022年1月最新)(一)基本原理Part1-通過子程式和程式間通訊(IPC)
2022-01-15
PythonJavaScriptIPC
Python求解谷歌高速公路招聘廣告:{無理數e中前十位連續的素數}.com
2022-01-15
Python
Python函式與lambda表示式(匿名函式)
2022-01-15
Python
python分支結構與迴圈結構
2022-01-15
Python
Python與Javascript相互呼叫超詳細講解(2022年1月最新)(三)基本原理Part3-通過C/C++聯通
2022-01-16
PythonC++JavaScript
用js玩轉Scriptable,超簡單教程
2022-01-16
10個常用的Python影像處理工具,非常全了!
2022-01-17
Python
學Python可以用來幹什麼?
2022-01-17
Python
從頭造輪子:python3asyncio之gather(3)
2022-01-17
Python
什麼是Python?Python語言支援哪幾種程式設計方式?
2022-01-17
Python
Python為什麼不設計do-while迴圈結構?
2022-01-17
Python
最新文章
CMR:印度手機遊戲調查報告
大咖說·圖書分享|HaaS物聯網裝置雲端一體開發框架
話實踐,行實幹,成實事:“巡禮”數字化的中國大地
構建安全程式碼防止供應鏈攻擊
【推薦閱讀】超有用的漏洞掃描工具合集!
國密SM演算法有哪些?
為什麼伺服器選擇Linux系統
ApacheFlinkML2.1.0釋出公告
乾貨|作為前端開發者如何邁向獨立開發者
助力開發者,全方位解讀APISIX測試案例
得物資料庫中介軟體平臺“彩虹橋”演進之路
KubeSphere3.3.0離線安裝教程
延伸文章資訊
- 1Python多型(Polymorphism)實用教學 - 快樂學程式
多型(Polymorphism). 一、Python抽象方法(Abstract Method). 要使用抽像方法(Abstract Method)的類別首先 ...
- 2[Python教學]物件導向-Class類的封裝/繼承/多型 - MAX行銷誌
[Python教學] 物件導向-Class類的封裝/繼承/多型 · 首先用Class 來定義類別 · OOP 特性一. 繼承(inheritance) · OOP 特性二. 封裝(encapsu...
- 3python極簡教程07:封裝、多型和繼承 - IT人
測試奇譚,BUG不見。這一場主講python的物件導向部分——封裝、多型和繼承。目的:掌握Python物件導向的三個核心概念。封裝01 什麼是封裝?
- 4Python多型(Polymorphism)實用教學- 物件導向程式設計學習
- 5python 多型
函數的“多型” 為多種型態,有父類別的型態,有子類別的型態子類別繼承父類別,子類別的方法跟父類別的方法相同名稱,子類別會改寫父類別的方法稱 ...