目錄
⾯向對象三⼤特徵:封裝、繼承、多態
1.封裝
隱藏對象的屬性和實現細節,僅對外公開接⼝,控制在程序中屬性的讀取和修改的訪問級別。
類本身就是⼀種封裝,通過類可以將數據(屬性)和⾏爲(⽅法)相結合,形成⼀個有機的整體,也就是將數據與對數據的操作有機的結合。封裝的⽬的是增強安全性和簡化編程,使⽤者不必瞭解具體的實現細節,⽽只是要通過外部接⼝,以特定的訪問權限來使⽤類的成員。成員私有化是實現封裝的⼿段。所有的成員默認是公有。
1.1 屬性私有化
如果想讓類的內部屬性不被外界直接訪問,可以在這個屬性的前⾯加兩個下劃線__,在Python中,如果⼀個屬性的前⾯出現 __,就表示這個屬性只能在當前類的⽅法中被直接訪問,不能通過對象直接訪問,這個變量就被稱爲私有變量
1.2 屬性裝飾器
對於私有屬性的訪問,使⽤公開⽅法間接訪問的⽅法太麻煩, python提供了⼀種便捷語法,屬性裝飾器,通過屬性裝飾器,可以很⽅便的對私有屬性進訪問,屬性修飾器可以把⽅法屬性化。
1.3 成員⽅法私有化
如果對⼀個⽅法的名字前⾯加__,聲明該⽅法爲私有⽅法,只能在當前類中被調⽤,在外界不能通過對象直接調⽤,這就是私有⽅法
2.繼承
⾯向對象編程 (OOP) 語⾔的⼀個主要功能就是“繼承”,所謂繼承就是使現有的類⽆需編碼便可以擁有原有類的⽅法和屬性。
被繼承的類可以稱之爲⽗類、基類、超類。繼承的類可以稱之爲⼦類、派⽣類。派⽣和繼承是⼀體兩⾯,從⽗類向⼦類看就是派⽣,從⼦類向⽗類看就是繼承。⼦類和⽗類的關係可以⽤“is a”類表示,即⼦類是⽗類的⼀種,是⼀個更具體、更加強⼤的⽗類。 python⽀持單繼承和多繼承。
繼承的優點:
- 可以簡化代碼,減少冗餘度
- 提⾼了代碼的可維護性
- 提⾼了代碼的安全性
2.1 單繼承
所謂的單繼承就是⼀個⼦類只有⼀個⽗類。⼦類會繼承⽗類所有的屬性和⽅法。
- 私有成員在⼦類中⽆法直接使⽤
- ⼦類對象⽆法直接使⽤繼承⾃⽗類的私有成員
- ⼦類⽅法和⽗類⽅法重名,通過⼦類對象調⽤的是⼦類⽅法
注意: object是Python中所有類的⽗類【⼀般情況下,如果⼀個類沒有指明的⽗類,默認它的⽗類爲object】
- 構造函數的繼承
- ⽅法的改寫
- ⽅法添加
2.2 多繼承(理解、瞭解)
⼀個⼦類可以有多個⽗類。語法:
3.類成員
類成員包括:類屬性和類⽅法,不同於成員屬性和成員⽅法屬於對象,類屬性和類⽅法屬於類,可以不實例化對象,直接通過類名調⽤,這些類成員爲所有對象共有,⼀般⽤於對象間通信。
在程序運⾏期間類屬性始終存在
類屬性
類⽅法和靜態⽅法
- 類⽅法屬於類,爲所有對象共有,可以通過類名或對象調⽤
- 類⽅法可以⽤來訪問類屬性
- 靜態⽅法屬於類的作⽤域內的全局函數
- 類⽅法和靜態⽅法的區別,類⽅法第⼀個參數是類對象,由系統傳⼊,靜態⽅法沒有
- 共同點:靜態⽅法和類⽅法都可以通過類名直接調⽤,屬於類,不屬於對象
作業
初級
1.劉凱買了一臺玫瑰紅phone10,價值8000元,可以打電話、玩遊戲
2.寫一個計算器器類,可以進行加、減、乘、除計算
3.設計兩個類:
- 一個點類,屬性包括xy座標。
- 一個Rectangle類(矩形) ,屬性有左上⻆和右下角的座標,可以計算矩形的面積;可以判斷點是否在正方形內
實例化一個點,⼀個正方形,輸出正⽅形的⾯積,輸出點是否在正方形內
4.定義一個Time類,成員屬性包括:時、分、秒;成員⽅方法:
add_hour(self,num) 把小時加numadd_minute(self,num) 把分鐘加numadd_second(self,num) 把秒數加num重寫 __str(self)__ ⽅方法,返回格式化的時間字符串串: "04:16:09"
中級
1.請寫⼀個小遊戲,人狗大站, 2個⻆⾊,⼈和狗,遊戲開始後,⽣成2個人, 3條狗,互相混戰,人被狗咬了會掉血,狗被人打了也掉血,狗和人的攻擊力,具備的功能都不⼀樣。