面向對象階段複習 一、類,對象,屬性方法調用 二、組合:表達什麼有什麼的問題,一個類都屬性是另一個類的對象 運行結果: 命名空間:類和對象分別存在不同的命名空間中,互不影響 三、面向對象的三大特征:繼承,多態,封裝 1、繼承 單繼承: 父類(超類,基類) 子類(派生類):派生方法和派生屬性 子類的對 ...
面向對象階段複習
一、類,對象,屬性方法調用
class 類名(父類1,父類2): 靜態屬性 = '' # 靜態屬性,也叫類屬性 def __init__(self): # 初始化方法 self.name = 'aa' def func(self): # 動態屬性 方法 print(self.age) # 這裡的age可以是實例化後,通過對象.age = xxx 的方式添加的屬性 對象 = 類名() # 實例化 對象.方法名() # 調用類裡面的方法 對象.屬性名 # 調用類裡面的屬性 對象即類裡面的self 對象.name # 調用name屬性 對象.age = 18 # 添加屬性,與前面的print(self.age)相應 對象.func() # 實際上也等於類名.func(對象)
二、組合:表達什麼有什麼的問題,一個類都屬性是另一個類的對象
# 組合:class 裡面有 course class Course: def __init__(self,name,price,period): self.name = name self.price = price self.period = period class Class: def __init__(self,name,course): self.name = name self.course = course # Class類的屬性course #self.course_name = 'python' # 賦值 python = Course('python xxx',18000,'6 months') # 實例化對象 Course類的實例化對象 pys1 = Class('pys_1',python) # 實例化對象,把python這個對像傳入course中,即Course的相關屬性也對應傳入 print(pys1.course.name) # 可以通過pys1查看到course的信息 組合的功能體現在這裡 python.name = 'python sss' # 可以通過組合,修改一些參數,比較簡單 print(pys1.course.name)
運行結果:
python xxx
python sss
命名空間:類和對象分別存在不同的命名空間中,互不影響
三、面向對象的三大特征:繼承,多態,封裝
1、繼承
- 單繼承:
- 父類(超類,基類)
- 子類(派生類):派生方法和派生屬性
- 子類的對象在調用方法和屬性:先用自己,自己沒有採用父類的
- 多繼承:
- 不會超過三個父類,最好不要超過三層
- 如果子類自己有用自己的,如果沒有就用距離子類最近的那個父類的方法
- 抽象類和介面類
- 經典類和新式類,繼承規則不同,深度優先和廣度優先原則(面試的時候有可能會問到,平時用不到)
- super只能在python3中使用 mro,是根據mro廣度優先順序找上一個類
2、多態(面試)
- 多態和鴨子類下
3、封裝(面試)
- 私有的
- __m名字
- 只能在類的內部調用,子類都無法繼承
- 三個裝飾器“
- @property 規範,與@name.setterj結合用可以做出一些設置
- @staticmethod
- @classmethod 當一個方法只使用了類的靜態變數時,就給這個方法加上@classmethod裝飾器,預設傳cls參數