• 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类


    第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类
    一、    引言
    前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不是以继承关系为标准,在各种调用中,不会显式地指定对象必须包含哪些方法才能用作参数,而是假设所有对象都能完成其工作,在执行时去调用特定协议的方法来执行,因此Python并不推荐在代码中去进行类型检查和属性检查。但为了提供一种可以要求实现对象遵循对应协议、提供所有特定功能集的方法,Python提供了抽象类的机制。

    二、    抽象类的作用
    抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。抽象类不能实例化,从抽象类派生出一个子类,如果没有重写所有抽象方法,则这个类也是抽象的,不能实例化。
    抽象类提供了逻辑和实现解耦的能力,即抽象类定义模块提供的功能,在具体实现类来提供实现,这样在不同的模块中通过抽象类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依赖清晰简单。同时,一个抽象类可以有多个实现,让系统的运转更加灵活。而针对抽象类的编程,让每个人可以关注当前抽象类,只关注其方法和描述,而不需要考虑过多的其他逻辑,这对协同开发有很大意义。极简版的抽象类实现,也让代码可读性更高。

    三、    Python抽象类的实现
    Python为了实现抽象类的支持,支持定义抽象基类(Abstract Base Class),Python使用模块abc提供了抽象基类的支撑能力。抽象基类用于指定子类必须提供哪些功能,却不实现这些功能。抽象基类提供基本类和最基本的抽象方法,可以为子类定义共有的方法,但不需要具体实现。
    Python的抽象基类使用有两种方式:真实子类和虚拟子类,本节先介绍真实子类相关的内容,后面章节再介绍虚拟子类。
    真实子类就是子类直接从抽象基类派生,抽象基类中可以定义”抽象方法“和“抽象属性”, 抽象基类可以不实现具体的方法,也可以实现部分,子类继承抽象基类的抽象内容并实现,只有完全重写了抽象基类中的“抽象”内容后,才能被实例化,如果有个抽象内容没有重写则子类本身也是抽象类,不能实例化。

    四、    抽象基类实现的步骤
    1.    导入abc模块的抽象基类ABC和方法abstractmethod:
    from abc import  ABC, abstractmethod
    2.    定义抽象基类:抽象基类要求从ABC类或其子类派生:
             class 抽象基类名(ABC):
                  类体代码
    3.    使用abstractmethod装饰器定义抽象方法或抽象属性,类似于类方法定义:
    @abstractmethod
    def 抽象方法名(self):

    抽象方法是子类必须实现的方法,否则子类无法定义。
    抽象属性的定义由于相关属性定义的内容还未介绍,本节暂不进行介绍,后面章节再进行补充。

    五、    抽象基类的使用
    1.    定义子类时指定子类从抽象基类继承;
    2.    抽象方法或者抽象基类中定义的实例化方法都可通过super()调用机制来调用;
    3.    抽象基类中定义的普通方法可以直接由子类继承使用,其调用方式与普通的类继承访问父类的方法相同。不过老猿推荐使用“super().方法名()”的方式类访问。

    本节详细介绍了Python抽象基类相关的概念、抽象基类定义的语法,下节将结合详细的案例进行进一步介绍。
    老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
    欢迎大家批评指正,谢谢大家关注!

  • 相关阅读:
    转的。一个C#的问卷!private、 protected、 public、 internal 修饰符的访问权限
    Windows Phone Mango编程实践——第三方MVVM框架
    Windows Phone Mango编程实践——本地数据库
    Windows Phone Mango开发实践——Shake Library应用实例
    Windows Phone Mango开发实践——示例代码更新和提交(2013.09.12)
    《Windows Phone Mango开发实践》终于出版
    《Windows Phone Mango开发实践》即将问世
    Windows Phone Mango开发实践——应用程序生命周期
    Windows Phone Mango开发实践——性能分析工具
    XNA二维游戏的视差背景实现方法
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11087695.html
Copyright © 2020-2023  润新知