什么是抽象类
- 抽象类是一个不能被实例化的类,通常作为其他类的基类
- 抽象方法是一个没有具体实现的方法
- 一个抽象类可以有或者没有抽象方法, 但是一般来说定义抽象类的时候总会在类中定义抽象方法
- Python并没有直接支持抽象类,但是提供了一个模块(abc)来允许定义抽象类
如何定义抽象类
通过继承abc.ABC类定义一个抽象类
from abc import ABC
class AbstractClassName(ABC):
pass
上述代码中AbstractClassName
类虽然继承了ABC
但是没有定义抽象方法,仍然可以被实例化。可以在抽象类中定义抽象方法,可以防止抽象类被实例化:
from abc import ABC,abstractmethod
class Action(ABC):
"""使用@abstractmethod来定义抽象方法
"""
@abstractmethod
def execute(self):
pass
def main():
action = Action()
if __name__ == "__main__":
main()
代码报错:不能实例化一个带有抽象方法的抽象类
TypeError: Can't instantiate abstract class Action with abstract methods execute
抽象类使用示例
from abc import ABC,abstractmethod
class Action(ABC):
'''定义一个抽象方法,这是子类必须实现的
'''
@abstractmethod
def execute(self):
pass
class CreateStudentAction(Action):
def execute(self):
print("create new student")
class DeleteStudentAction(Action):
def execute(self):
print("delete a student")
def execut_action(action: Action):
'''对于这个函数来说, 需要的参数必须是Action类的对象
'''
action.execute()
def main():
create_student_action = CreateStudentAction()
delete_student_action = DeleteStudentAction()
execut_action(create_student_action)
execut_action(delete_student_action)
if __name__ == "__main__":
main()
对于设计者来讲,只需要把Action
这个接口定义好
总结:
- 当需要定义一组子类时,抽象类非常有用,确保所有子类遵循相同的接口
- 在抽象类中定义一些通用的方法和属性,可以在所有子类中共享
本文参考:
https://www.bilibili.com/video/BV1GW4y147M2/?spm_id_from=333.788&vd_source=cf0b4c9c919d381324e8f3466e714d7a