当前位置:   article > 正文

【Python】python中抽象类学习笔记

【Python】python中抽象类学习笔记

什么是抽象类

  1. 抽象类是一个不能被实例化的类,通常作为其他类的基类
  2. 抽象方法是一个没有具体实现的方法
  3. 一个抽象类可以有或者没有抽象方法, 但是一般来说定义抽象类的时候总会在类中定义抽象方法
  4. Python并没有直接支持抽象类,但是提供了一个模块(abc)来允许定义抽象类

如何定义抽象类

通过继承abc.ABC类定义一个抽象类

from abc import ABC
class AbstractClassName(ABC):
    pass
  • 1
  • 2
  • 3

上述代码中AbstractClassName类虽然继承了ABC但是没有定义抽象方法,仍然可以被实例化。可以在抽象类中定义抽象方法,可以防止抽象类被实例化:

from abc import ABC,abstractmethod

class Action(ABC):
    """使用@abstractmethod来定义抽象方法
    """
    @abstractmethod
    def execute(self):
        pass

def main():
    action = Action()

if __name__ == "__main__":
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

代码报错:不能实例化一个带有抽象方法的抽象类

TypeError: Can't instantiate abstract class Action with abstract methods execute
  • 1

抽象类使用示例

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

对于设计者来讲,只需要把Action这个接口定义好
总结:

  1. 当需要定义一组子类时,抽象类非常有用,确保所有子类遵循相同的接口
  2. 在抽象类中定义一些通用的方法和属性,可以在所有子类中共享

本文参考:
https://www.bilibili.com/video/BV1GW4y147M2/?spm_id_from=333.788&vd_source=cf0b4c9c919d381324e8f3466e714d7a

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/973788
推荐阅读
相关标签
  

闽ICP备14008679号