面向对象的三大特性之继承
生活随笔
收集整理的這篇文章主要介紹了
面向对象的三大特性之继承
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# 面向對象的三大特性之繼承# 當類之間有顯著不同,并且較小的類是較大的類所需要的組件時,用組合比較好 (如機器人)
# 當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好 (動物——貓)
# 繼承同時有兩種含義:1,繼承基類的方法,并且做出自己的改變或擴展(代碼重用),這種意義并不大,因為它使子類和基類出現強耦合
# 2,聲明某個子類兼容于某基類。定義一個接口類,子類繼承接口類,并實現接口中定義的方法
# 接口繼承只是接口類規定了子類必須實現的方法,但是接口類里不去實現,子類繼承后,在子類中再寫具體實現的方法
# 可以導入abc模塊,并使用裝飾器@abc.abstractmethod,限定子類必須要定義接口類中的方法import abc # 導入abc模塊class AllFile(metaclass=abc.ABCMeta): # 定義接口類@abc.abstractmethod # 使用裝飾器,限定子類中必須要定義下面的方法def read(self): # 僅有方法名稱,并沒有具體內容,僅是為了規范子類pass@abc.abstractmethoddef write(self):passclass Disk(AllFile): # 子類Disk繼承AllFile接口類def read(self): # 必須定義接口提供的兩個方法,否則實例化時會報錯print('Disk read') # 方法的具體實現代碼def write(self):print('Disk write')class Cdrom(AllFile):def read(self):print('Disk read')def write(self):print('Disk write')d = Disk()# 新式類的繼承順序(廣度優先)
print(Disk.__mro__) # 顯示新式類的繼承順序方法1
print(Disk.mro()) # 顯示新式類的繼承順序方法2# 子類中調用父類的方法
class Vehicle:country = 'China'def __init__(self, name, speed, load, power):self.name = nameself.speed = speedself.load = loadself.power = powerdef run(self):print('父類方法')class Subway(Vehicle):def __init__(self, name, speed, load, power, line):super().__init__(name, speed, load, power) # 通過super()調用父類的方法self.line = line # 子類def show_info(self):print(self.name, self.speed, self.load, self.power, self.line)def run(self):super().run()print('子類方法')line13 = Subway('北京地鐵', '10km/s', 10000, '電', 13)
line13.show_info()
line13.run()
?
轉載于:https://www.cnblogs.com/dangrui0725/p/9457877.html
總結
以上是生活随笔為你收集整理的面向对象的三大特性之继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 问题收集帖
- 下一篇: PAT Basic 1048