python中抽象类的实现

 更新时间:2026年09月02日 08:42:41   作者:求道於盲  
本文主要介绍了python中抽象类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

抽象类是不能直接创建实例的类,用来规定子类必须实现哪些方法

Python 用 abc 模块实现,核心是两个东西:

  • ABC:继承它,就表示这是抽象类
  • @abstractmethod:标记「子类必须实现」的方法
from abc import ABC, abstractmethod

class Animal(ABC):  # 继承 ABC,表示这是一个抽象类
    @abstractmethod
    def speak(self):
        """子类必须实现这个方法"""
        pass

# animal = Animal()  # TypeError: 不能实例化抽象类

class Dog(Animal):
    def speak(self):  # 必须实现抽象方法
        print("Woof!")

dog = Dog()
dog.speak()  # Woof!

定义抽象类

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        """计算面积"""
        pass

    @abstractmethod
    def perimeter(self):
        """计算周长"""
        pass

    def describe(self):
        """普通方法,子类可直接使用"""
        print(f"这是一个图形,面积: {self.area()}, 周长: {self.perimeter()}")

要点:

  • 继承 ABC → 抽象类
  • @abstractmethod 标记的方法 → 子类必须实现
  • 可以同时有普通方法(有默认实现)
  • 抽象类不能被实例化

抽象属性

方法之外,属性也可以要求子类必须提供:

from abc import ABC, abstractmethod

class Employee(ABC):
    @property
    @abstractmethod
    def salary(self):
        """子类必须实现 salary 属性"""
        pass

class FullTimeEmployee(Employee):
    def __init__(self, monthly_salary):
        self._monthly_salary = monthly_salary

    @property
    def salary(self):
        return self._monthly_salary

emp = FullTimeEmployee(10000)
print(emp.salary)  # 10000
  • @abstractmethod:标记这个方法/属性必须被子类实现
  • @property:让子类实现后可以用 emp.salary 而不是 emp.salary() 来访问,像属性一样使用

两者组合起来就是:强制子类提供一个"属性",且调用方式像属性而非方法

注意: @property 要写在 @abstractmethod 上面,顺序不能颠倒。

子类必须实现全部抽象方法

少实现一个,子类本身仍是抽象类,照样不能实例化:

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    # 忘记实现 perimeter 方法

# rect = Rectangle(3, 4)  # TypeError: 不能实例化抽象类 Rectangle

到此这篇关于python中抽象类的实现的文章就介绍到这了,更多相关python 抽象类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python读取和保存mat文件的方法

    python读取和保存mat文件的方法

    本文主要介绍了python读取和保存mat文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python实现根据表格数据自动生成50张趋势图并插入Excel

    Python实现根据表格数据自动生成50张趋势图并插入Excel

    这篇文章主要为大家详细介绍了如何使用Python的openpyxl库处理Excel数据并自动化生成图表,然后插入Excel,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-06-06
  • Python实现快速计算24点游戏的示例代码

    Python实现快速计算24点游戏的示例代码

    这篇文章主要为大家详细介绍了Python如何实现快速计算24点游戏并获取表达式,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12
  • windows下Virtualenvwrapper安装教程

    windows下Virtualenvwrapper安装教程

    这篇文章主要为大家详细介绍了windows下Virtualenvwrapper安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python如何正确使用yield

    python如何正确使用yield

    在 Python 开发中,yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构、协程与并发都会用到它。但是,你是否真正了解 yield 的运行过程呢?这篇文章,我们就来看一下 yield 的运行流程,以及在开发中哪些场景适合使用yield
    2021-05-05
  • Python线程指南分享

    Python线程指南分享

    今天小编就为大家带来Python线程指南分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python2与python3中关于对NaN类型数据的判断和转换方法

    python2与python3中关于对NaN类型数据的判断和转换方法

    今天小编就为大家分享一篇python2与python3中关于对NaN类型数据的判断和转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python JSON常用编解码方法代码实例

    Python JSON常用编解码方法代码实例

    这篇文章主要介绍了Python JSON常用编解码方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 详解基于pycharm的requests库使用教程

    详解基于pycharm的requests库使用教程

    本文主要介绍了基于pycharm的requests库使用教程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python装饰器中常用的functools.wraps的使用

    Python装饰器中常用的functools.wraps的使用

    functools.wraps是Python装饰器开发中的关键工具,下面就就来介绍一下Python装饰器中常用的functools.wraps的使用,感兴趣的可以了解一下
    2025-08-08

最新评论