一日一技:在 Python 里面如何實現(xiàn)一個抽象類
在某個在線教育的網(wǎng)站上設(shè)計模式相關(guān)的課程中,某老師說 Python 不支持抽象類和接口。
但實際上,Python 支持抽象類。Python 自帶的abc模塊用于實現(xiàn)抽象類相關(guān)的定義和操作。
我們通過一個簡單的例子來說明,如何在 Python 中實現(xiàn)抽象類:
- from abc import ABC, abstractmethod
- class People(ABC):
- @abstractmethod
- def walk(self):
- pass
- @abstractmethod
- def eat(self):
- pass
- def dance(self):
- print('我正在跳舞')
從abc模塊導(dǎo)入ABC類,和abstractmethod抽象方法裝飾器。基于ABC類可以實現(xiàn)一個抽象類。通過@abstractmethod裝飾一個方法,讓它成為一個抽象方法。抽象方法在子類中必需被實現(xiàn)。
抽象類不能被實例化,所以我們實例化一下,可以看到這里報錯了,如下圖所示:
我們再看一下,如果繼承抽象類,但是沒有實現(xiàn)其中的某個抽象方法,也會導(dǎo)致報錯。如下圖所示:
當(dāng)我們把所有抽象方法都實現(xiàn)了以后,子類就能夠正常初始化了,如下圖所示:
抽象類People中的dance不是抽象方法,所以子類不需要覆蓋。抽象類是軟件開發(fā)中一個非常重要的概念,通過定義抽象類,我們可以約定子類必需實現(xiàn)的方法。當(dāng)我們一個類有幾十上百個方法時,用抽象方法來防止子類漏掉某些方法是非常方便的做法。