Loading

面向对象之抽象类

【一】什么是抽象类

  • 抽象类是一种不能被实例化的类,它充当了一种模板或者说是蓝图。在抽象类中,你可以定义一些抽象方法,这些抽象方法没有具体的实现,即没有方法体。它们必须在抽象类的子类中被实现,除非那个子类也是一个抽象类。抽象类可以包含具体方法(已实现的方法)和抽象方法(未实现的方法)。

【二】为什么要有抽象类

  • 如果不想用鸭子类型,就想用父类来达到规范子类的效果,就可以引入这个抽象类

  • 代码重用和分离:抽象类允许你定义一些子类应该拥有的通用方法和属性,从而避免代码重复。

  • 设计约束和规范:它为其他类提供一个共同的父类,确保所有子类都遵循相同的基本设计,强制子类实现特定的方法。

  • 强化架构:使用抽象类可以使得软件架构更加清晰,强化各个类之间的关系和职责。

【三】如何使用抽象类

【1】导入模块

# 一切皆文件
# 利用abc模块实现抽象类
import abc  

【2】不按照抽象类规范来就会报错

import abc


class Car(metaclass=abc.ABCMeta):


    @abc.abstractmethod
    def run(self):
        ...

    @abc.abstractmethod
    def music(self):
        ...


class Benz(Car):
    def run(self):
        ...



car_1 = Benz()
"""
Traceback (most recent call last):
  File "D:\python28\面向对象\导读.py", line 297, in <module>
    car_1 = Benz()
            ^^^^^^
TypeError: Can't instantiate abstract class Benz with abstract method music
进程已结束,退出代码1
"""
  • 这里Benz子类没有按照抽象类的规范,没有music()方法,所以就会报错

【3】按照抽象类的规范来

import abc


class Car(metaclass=abc.ABCMeta):


    @abc.abstractmethod
    def run(self):
        ...

    @abc.abstractmethod
    def music(self):
        ...


class Benz(Car):
    def run(self):
        ...

    def music(self):
        ...

car_1 = Benz()


  • 只有和父类一模一样,才不会报错

【四】抽象类与接口

  • 抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。
  • 抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计
posted @ 2024-01-13 23:20  HuangQiaoqi  阅读(7)  评论(0编辑  收藏  举报