首先我们import需要的用到的库:
from abc import ABC,abstractmethod
接下来我们定义所需的抽象类(abstract class):
class Animal(ABC):
@abstractmethod
def eat(self):
pass
利用@abstractmethod
装饰器,同时eat函数的函数体(body)的内容为pass
,我们就构造了一个抽象类。
这个抽象类不能直接实例化使用,例如:
animal = Animal() # 错误代码
就会报错Can't instantiate abstract class Animal with abstract methods eat
.
正确的做法是,我们需要具体实现抽象类中的eat方法之后,才能将类实例化出对象:
class Cat(Animal):
def eat(self):
print('I eat fish')
class Sheep(Animal):
def eat(self):
print('I eat grass')
我们重新书写了eat函数,实现了函数的覆盖(override),这样就能实例化了:
cat = Cat()
sheep = Sheep()
cat.eat()
sheep.eat()
输出为:
I eat fish
I eat grass