1.抽象類概念
抽象類是一個(gè)特殊的類,只能被繼承,不能實(shí)例化
2.為什么要有抽象類
其實(shí)在未接觸抽象類概念時(shí)逊彭,我們可以構(gòu)造香蕉、蘋果构订、梨之類的類侮叮,然后讓它們繼承水果這個(gè)的基類,水果的基類包含一個(gè)eat函數(shù)悼瘾。
但是你有沒有想過囊榜,我們可以將香蕉审胸、蘋果、梨實(shí)例化卸勺,去吃香蕉砂沛、蘋果、梨曙求。但是我們卻不能將水果實(shí)例化碍庵,因?yàn)槲覀儫o法吃到叫水果的這個(gè)東西。
所以抽象類中只能有抽象方法(沒有實(shí)現(xiàn)功能)悟狱,該類不能被實(shí)例化静浴,只能被繼承,且子類必須實(shí)現(xiàn)抽象方法挤渐。
3.抽象類的作用
在不同的模塊中通過抽象基類來調(diào)用苹享,可以用最精簡(jiǎn)的方式展示出代碼之間的邏輯關(guān)系,讓模塊之間的依賴清晰簡(jiǎn)單浴麻。
抽象類的編程得问,讓每個(gè)人可以關(guān)注當(dāng)前抽象類的方法和描述,而不需要考慮過多的實(shí)現(xiàn)細(xì)節(jié)软免,這對(duì)協(xié)同開發(fā)有很大意義宫纬,也讓代碼可讀性更高。
4.抽象類的使用
import abc # 利用abc模塊實(shí)現(xiàn)抽象類
class File(metaclass=abc.ABCMeta): # abc.ABCMeta是實(shí)現(xiàn)抽象類的一個(gè)基礎(chǔ)類
@abc.abstractmethod # 定義抽象方法或杠,無需實(shí)現(xiàn)功能
def read(self):
pass
class Txt(File): # 子類繼承抽象類哪怔,但是必須定義read方法將抽象類中的read方法覆蓋
def read(self):
print('文本數(shù)據(jù)的讀取方法')
txt1 = Txt()
txt1.read()
txt2 = File()
txt2.read()
輸出為:
文本數(shù)據(jù)的讀取方法
Traceback (most recent call last):
File "E:/work/policy/yibu.py", line 18, in <module>
txt2 = File()
TypeError: Can't instantiate abstract class File with abstract methods read
抽象類實(shí)例化報(bào)錯(cuò)了宣蔚,得到了我們想要的結(jié)果