python 抽象类、抽象方法的实现
python 没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库abc模块提供了一个抽象基类声明协议的机制,并且子类一定要提供了一个符合该协议的实现。
抽象基类提供了一种要求子类实现指定协议的方式,如果一个抽象基类要求实现指定的方法,而子类没有实现的话,当试图创建子类或者执行子类代码时会抛出异常。
导入抽象基类
from abc import ABCMeta, abstractmethod
class Task(metaclass=ABCMeta):
def __init__(self):
pass
@abstractmethod
def run(self):
pass
注意:
一、Task类本身不能被实例化,否则会报错。
t = Task()
运行结果:
Traceback (most recent call last):
File "E:/Python/demo.py", line 47, in <module>
t = Task()
TypeError: Can't instantiate abstract class Task with abstract methods run
二、对于不能正确重写父类方法的子类,实例化时会报错
class SubTask(Task):
def __init(self):
super().__init__()
ot = SubTask()
运行结果:
Traceback (most recent call last):
File "E:/Python/demo.py", line 37, in <module>
ot = SubTask()
TypeError: Can't instantiate abstract class SubTask with abstract methods run
三、定义一个重写父类方法的子类,那么子类就能够被实例化,就能正常工作。
class SubTask(Task):
def __init(self):
super().__init__()
def run(self):
print('Task')
st = SubTask()
st.run()
运行结果:
Task
总结:
抽象方法必须被子类(派生类)重写,由子类去实现具体逻辑,父类抽象方法定义更类似于搭建一个骨架,由子类实现,使代码更完整,体现多态