美文网首页
Python abc — 抽象类¶

Python abc — 抽象类¶

作者: 虐心笔记 | 来源:发表于2020-04-02 21:33 被阅读0次

    一、概述

        抽象类是一个特殊的类,只能被继承,不能实例化。
        抽象类基于类抽象而来,主要用于被继承的子类,约束子类实现抽象方法,实现归一化设计。
        抽象类中有定义抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。
        抽象类的本质还是类,指的是一组类的相似性,包括数据属性、函数属性。介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计 。
        在不同的模块中通过抽象基类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依赖清晰简单。抽象类的编程,让参与者可以关注当前抽象类的方法和描述,而不需要考虑过多的实现细节,这对协同开发有很大意义,便于提升代码可读性、灵活性、扩展性。 

        

     为什么需要抽象类呢?

        之前学习过类-面向对象的概念,就可以知道类是基于对象抽象的,那么抽象类是基于类抽象而来

        举例说明:

        假设有多个对象类,如狗、猫、猴子、牛、马等。那么这些对象有一些共同的特征或者行为,然后把这些相同特征、行为抽象出来,定义一个叫动物 Animal 类, 抽取出来的特征和行为定义为属性和方法。因为动物这个概念相对来说比较抽象,现实中你不可能看见一个叫动物的东西。要么看到的是一条狗,要么是猫。

        从实现的角度来看,普通类和抽象的区别就在于:抽象类只有抽象方法,没有具体实现其功能。所以说实例化该类是无意义的,因此抽象类定义是无法被实例化。只能被继承,且继承的子类必须实现该类的抽象方法。跟接口的定义有点类似。



    二、抽象类的定义

        在Python中实现抽象类的定义是通过abc模块来实现。abc模块中定义了抽象类的metaclass类ABCMeta,以及抽象方法装饰器abstractmethod,、abstractclassmethod,、abstractstaticmethod、抽象property装饰器 abstractproperty 等,通过这些工具类、方法来实现抽象类的创建。

                实现方法:通过直接继承该抽象类,然后实现两个抽象方法。注意如果没有实现抽象方法的话将抛出:

    注意: 如果没有实现其中抽象方法的某一个的话将抛出
        TypeError: Can't instantiate abstract class WashingMode with abstract methods XXX

        abc模块不仅提供了一个元类 ABCMeta,可以用来定义抽象类,另外还提供一个工具类 ABC,可以用它以继承的方式定义抽象基类。如果一个使用 ABCMeta 作为元类的工具类。抽象基类可以通过从 ABC 派生来简单地创建,这样的话就避免了在某些情况下会令人混淆的元类用法

    相关文章

      网友评论

          本文标题:Python abc — 抽象类¶

          本文链接:https://www.haomeiwen.com/subject/rwjfphtx.html