Python 抽象类原理以及编写

Python抽象类详解:从基础到高级应用 抽象类是面向对象编程中的核心概念,通过定义方法签名而不提供具体实现,强制子类遵循特定接口规范。Python通过abc模块实现抽象类,利用元类机制在实例化时进行方法实现检查。这种设计模式在插件系统、算法策略等场景具有重要价值,能确保代码的可扩展性和可维护性。结合Python 3.8引入的Protocol类和类型注解,现代Python开发中抽象类的应用更加灵活高效。本文深入解析Python抽象类的实现原理、应用场景和最佳实践,帮助开发者掌握这一重要编程范式。 阅读详情

1.抽象类概念

抽象类是一个特殊的类,只能被继承,不能实例化

2.为什么要有抽象类

其实在未接触抽象类概念时,我们可以构造香蕉、苹果、梨之类的类,然后让它们继承水果这个的基类,水果的基类包含一个eat函数。

但是你有没有想过,我们可以将香蕉、苹果、梨实例化,去吃香蕉、苹果、梨。但是我们却不能将水果实例化,因为我们无法吃到叫水果的这个东西。

所以抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。

3.抽象类的作用

在不同的模块中通过抽象基类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依赖清晰简单。

抽象类的编程,让每个人可以关注当前抽象类的方法和描述,而不需要考虑过多的实现细节,这对协同开发有很大意义,也让代码可读性更高。

 

Python 自带的abc模块用于实现抽象类相关的定义和操作。

我们通过一个简单的例子来说明,如何在 Python 中实现抽象类:

from abc import ABC, abstractmethod
​
class People(ABC):
    @abstractmethod
    def walk(self):
        pass
    
    @abstractmethod
    def eat(self):
        pass
    
    def dance(self):
        print('我正在跳舞')

从abc模块导入ABC类,和abstractmethod抽象方法装饰器。基于ABC类可以实现一个抽象类。通过@abstractmethod装饰一个方法,让它成为一个抽象方法。抽象方法在子类中必需被实现。

注意:

抽象类不能被实例化,所以我们实例化一下,可以看到这里报错了

 

我们再看一下,如果继承抽象类,但是没有实现其中的某个抽象方法,也会导致报错

 

抽象类People中的dance不是抽象方法,所以子类不需要覆盖。

总结:

抽象类是软件开发中一个非常重要的概念,通过定义抽象类,我们可以约定子类必需实现的方法。当我们一个类有几十上百个方法时,用抽象方法来防止子类漏掉某些方法是非常方便的做法。

完整代码

from abc import ABC, abstractmethod

class People(ABC):
    @abstractmethod
    def walk(self):
        pass

    @abstractmethod
    def eat(self):
        pass

    def dance(self):
        print('我正在跳舞')

class kid1(People):
    def __init__(self):
        pass

    def walk(self):
        print('走路')

    def eat(self):
        print('吃饭')

if __name__ == '__main__':
    k = kid1()
    k.dance()
    k.eat()
    k.walk()

运行结果:

【python高级】设计模式、类工厂、对象工厂 最近试着读Design pattern, 不过有些概念实在太抽象了, 整理一下自己所学抽象工厂的精神,就是要有abstract class(not implement),而所有不同种类的对象,都是继承这个abstract class,但是使用者只知道interface的接口就好。 阅读详情

相关推荐

Python中对象引用与命名空间的深入探索

本章深入探讨了Python中对象是如何通过引用供代码使用,特别是命名空间的工作机制,模块的导入与使用,以及类相关主题,如多重继承、方法解析顺序、抽象类等。通过具体的代码示例,本章揭示了全局和局部命名空间的区别,以及如何通过闭包来创建状态记忆函数。

weixin_30923011的博客 297

python的@abstractmethod

1、写在前面 由于python 没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库 2、@abstractmethod特点 @abstractmethod:抽象方法,含abstractmethod方法的类不能实例化,继承了含abstractmethod方法的子类必须复写所有abstractmethod装饰的方法,未被装饰的可以不重写 3、举个反面例子(实例化抽象类) 4、举个正常例子 承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本.

weixin_36670529的博客 5556

基于live555实现一个rtsp客户端程序

本文介绍了基于live555流媒体库实现的RTSP客户端程序,能够通过RTSP地址获取H.264/H.265裸码流或TS流数据并存入本地文件。详细阐述了使用CLion搭建工程的代码架构和CMake配置,重点分析了TS流解析模块的实现,包括TS包结构解析、PES包提取和ES裸流获取的完整流程。文章提供了TS/PES/ES三种数据包的协议说明,并给出了从TS流中提取视频帧的具体方法,最后附有工程代码下载链接。该方案实现了RTSP流媒体接收、解析和存储的完整功能链。

kk821521286的博客 790

Python2和Python3中@abstractmethod的用法

Python2和Python3中@abstractmethod的用法

xiemanR的专栏 2万+

UE5导入MetaHuman虚拟头像后,连接live link face,面部表情捕捉出错修正

UE5 利用live link face 驱动meta human面部表情捕捉

m0_53122690的博客 6595

【python快速编程入门(第二版)黑马程序员课后编程题】

python快速编程入门(第二版)黑马程序员课后编程题

weixin_46167259的博客 1万+

Python中的抽象类(简单易懂版)

Python中的抽象类(一看就懂!!!)

Elon15的博客 1万+

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

【Python知识】谈谈Python的抽象类

一个抽象类可以被认为是其他类的蓝图。它允许您创建一组必须在从抽象类构建的任何子类中创建的方法。包含一个或多个抽象方法的类称为抽象类。抽象方法是具有声明但没有实现的方法。在设计大型功能单元时,我们使用抽象类。当我们想为组件的不同实现提供通用接口时,我们使用抽象类。......

gongdiwudu的专栏 1万+

雷达杂波的基础知识

例如工作在海上的机载雷达,航行在海上的船用雷达,它们都不想要海杂波,会影响它们对小目标的检测,从而以为“漏掉”海面飞行的巡航导弹而被击毁。海杂波的反射系数是非常复杂的,影响的因素很多,除了和雷达参数有关,显然还和海况息息相关,经验模型经常将反射系数表示成海况的函数,在不同条件和不同模型的情况下,反射系数的值不同。说到“杂波”,你可能想到的就是如何去抑制它,去减少它在雷达回波中的分量,在很多情况是这样的。云雨的反射对飞机雷达来说是不希望的,但确是气象雷达所利用的,可以用来测量降雨率,提升天气预报的准确性。

qq_43416206的博客 2133

新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置

一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。

一键难忘的博客 359

python源码中明明没有逻辑代码 为什么还能执行呢

最近看Python代码  按照一个函数递进的看下去,最后发现,遇到很多源码什么逻辑都没写,仅仅以一个pass  结尾           但却能得到应该得到的结果,这点真的很奇怪,上网查找后 觉得下面的说法还挺符合我的想法  在这里粘贴出来,以后学习深入后继续增加或者修改相关表述: python是C语言实现的,尽管有很多标准库是由python代码实现,但是涉及到底层支撑架构的功能还是C代码。...

IT_NEU_Lee的博客 2788

⭐️VMwareWorkstation17.0虚拟机安装搭建Windows 7虚拟机(完整图文详细步骤含配置VMware Tools教程)

本教程为大家提供了从安装VMware Workstation 17.0开始,到在虚拟机上成功搭建Windows 7专业版系统的完整步骤。我们详细介绍了准备阶段所需的软件和硬件要求,以及在VMware中配置和安装Windows 7系统的每一步操作。此外,我们还特别提到了如何在虚拟机上配置VMware Tools,以便更好地与宿主机进行交互。 通过本教程的学习,读者不仅能够掌握在VMware Workstation 17.0上安装Windows 7虚拟机的技能,还能了解到如何配置虚拟机的硬件以及安装VMwar

Python老吕的博客 2万+

python 抽象类的意义_python之抽象类

1什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化2为什么要有抽象类如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的...

weixin_34503235的博客 1903

uniapp [全端兼容] - 详细实现下拉筛选菜单功能组件,下拉式筛选菜单效果,类似电商美团点击筛选项底部弹出列表点击选择后自动收起(详细示例代码,全端兼容小程序、安卓苹果app、h5网页、nvue

uni-app,vue2,vue3,向下弹出菜单包含筛选功能,日期筛选,下拉框选择器,下拉多条件筛选,下拉式筛选菜单,uniApp如何实现条件下拉筛选,Uniapp官方条件筛选组件,下拉框式条件筛选插件组件,最好用的插件组件,多端兼容,下拉菜单筛选,过滤筛选列表,下拉筛选栏,多列联动的条件筛选,下拉菜单地区和筛选,微信小程序,支付宝小程序,h5网页,移动端网站,安卓app,苹果app,nvue,uniapp所有平台兼容,下拉菜单筛选,下拉式条件筛选,下拉列表,点击排序,级联筛选,uniapp实现下拉筛选

🏆 前端领域优质创作者 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python·抽象类·继承原理

抽象类 定义抽象类 定义抽象类需要导入abc模块 from abc import ABCMeta,abstractmethod. from abc import ABCMeta,abstractclassmethod #抽象类 class Animal (metaclass=ABCMeta): #抽象方法 @abstractclassmethod def eat(self...

来了?那就多看看吧 1274

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python的抽象类详解_python之抽象类

1什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化2为什么要有抽象类如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的...

weixin_39859061的博客 404

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python中的抽象类及多继承

一、抽象类 之前我们定义了Person类实现了eat()、sleep()方法, 每种人都会吃喝但是吃喝的地点不同,如果实现了方法体就浪费了。因此我们可以只定义eat()方法,不实现方法体,这种形式我们可以将方法定义为抽象方法,具有抽象方法的类就叫做抽象类。 抽象类是一个特殊的类,只能被继承,不能实例化,抽象类中可以有抽象方法和普通方法。 (1) .定义抽象类 定义抽象类需要导入 abc模块。 fr...

李嘉豪的博客 2697

python的抽象类详解_Python的抽象类学习-1

最近在通过源代码的方式学习python的抽象类。有一些心得体会,希望能记录下来。学习的时候是基于python3.6,以及cpython master上的源代码来了解的。我对c语言,以及cpython的实现并不熟悉,所以c实现部分只是大概了解了一下。实现自己的抽象类python的abc模块中定义了抽象类的metaclass类ABCMeta,以及抽象方法装饰器abstractmethod, abstr...

weixin_39942785的博客 638

Python 多态与抽象类

一、多态 1.1 什么是多态 多态指的是同一种类型的事物,不同的形态 1.2 多态的目的: “多态”也称之为“多态性”,目的是为了在不知道对象具体类型的情况下,统一对象调用方法的名字 父类: 定制一套统一的规范。(比如: 方法名统一) 子类: 遵循父类的统一的规范。(比如: 子类遵循父类方法名的统一) #动物类 class Animal: #方法:吃 def eat(self): ...

挽不了风丶的博客 279

Python--抽象类

1什么是抽象类与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化2为什么要有抽象类如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体...

OscarMind的博客 2025

什么是抽象类(Abstract Class)?如何定义抽象类?使用场景是什么?底层原理是什么?

抽象类是一种特殊的类,它不能被实例化,只能作为其他类的基类。抽象类可以包含抽象方法和具体实现的方法。抽象方法是没有具体实现的方法声明,必须在派生类中被实现。抽象类的主要目的是为一组相关类提供一个共同的接口或基础结构。在PHP中,可以通过abstract关键字来定义抽象类和抽象方法。// 定义一个抽象类// 抽象方法,没有具体实现// 具体方法,有具体的实现// 派生类必须实现抽象类中的所有抽象方法\n";// 创建Dog对象并调用其方法// 输出: Woof woof!

长风破浪会有时的博客 1565

Python抽象类实战:从原理到电商支付系统应用

抽象类是面向对象编程中实现多态和接口规范的核心机制,通过定义抽象方法强制子类实现特定行为。Python通过内置的abc模块提供抽象基类支持,结合@abstractmethod装饰器实现编译时检查。这种设计模式在构建可扩展系统时尤为重要,例如电商平台的支付网关需要统一接口但允许不同实现。在工程实践中,抽象类既能用于基础框架设计(如插件系统),也能解决具体业务问题(如多支付渠道整合)。最新Python版本还优化了抽象类与异步方法、数据类的结合使用,使其成为中大型项目中不可或缺的架构工具。

weixin_32667955的博客 335

Python 装饰器、抽象类

#装饰器:对类或者函数进行功能的扩展 ''' #第一步:基本函数 def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #调用函数 la() la() #第二步:扩展函数功能(不能修改原函数) #用于扩展基本函数的函数 def kuozhan(func): #扩展功能1 print('la前参拜祈求') #调用基本函数 ...

爱人BT的博客 1302

Python抽象类:规范、实战与高级技巧全解析

Python抽象类:规范、实战与高级技巧全解析

学习成长日记 1699

python之抽象类

1什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 2为什么要有抽象类 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃...

weixin_30367945的博客 311
上一篇: 嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!
下一篇: 修改Linux终端命令行字体颜色显示
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值