赞
踩
- 抽象类是一个不能被实例化的类,通常作为其他类的基类
- 抽象方法是一个没有具体实现的方法
- 一个抽象类可以有或者没有抽象方法, 但是一般来说定义抽象类的时候总会在类中定义抽象方法
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。