037.Python面向对象_关于抽象类和抽象方法

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

分隔线

关于抽象类和抽象方法

    • 抽象类和抽象方法
      • 概念
      • 为什么要抽象类和抽象方法
      • 抽象类的作用
      • 具体实现方法

抽象类和抽象方法

概念

  • 抽象类:一种特殊的类,只能被继承,不能被实例化,创建实例会报错
  • 抽象方法:一个抽象出来的方法,不具备具体实现,不能直接调用,子类必须实现这个方法,否则会报错
  • 抽象类与普通类的不同之处在于:抽象类必须包含一个或多个抽象方法,也可以包含普通方法,该类不能被实例化,只能被继承,且子类必须实现抽象方法

为什么要抽象类和抽象方法

  • 抽象类: 比如需要创建Dog类、Cat类、Chick类(一些具体的动物类),那么就可以创建一个Animal类把这些具体的动物类共有的一些特性放到这个Animal类当中。但是,这个Animal类实例化出来的对象又没有什么具体的含义(实例化的一个对象就是一个动物,但是又不能体现是什么具体的动物),此时,我们就可以把这个Animal类设计成一个抽象类
  • 抽象方法: 这些具体的动物对象都会有一些必须的特性(比如:叫、吃、跑…),那么,我们在定义这些具体的动物类的时候,就必须去实现这些特性的方法。我们就可以在父类Animal中将这些特性方法设计成一个抽象方法,父类不需要去具体实现这些方法,但是子类必须实现

抽象类的作用

  • 1、定义接口:抽象类可以定义一组方法或属性作为接口,子类必须实现这些方法或属性。通过定义接口,可以确保子类具有必要的方法和属性,并且遵循一定的行为规范。
  • 2、规范子类的行为:抽象类可以定义一些默认的方法实现,子类可以选择性地继承或重写这些方法。通过规范子类的行为,可以保持代码的一致性,提高代码的可读性和可维护性。
  • 3、防止实例化:抽象类不能直接实例化,只能用作父类。这样可以避免在抽象类中定义的接口或默认方法被误用

具体实现方法

  • 无法直接支持,需要借助abc模块
    # 导入模块
    import abc
    
    # 设置类的元类 <class Animal(object, metaclass=abc.ABCMeta)>
    abc.ABCMeta
    
    # 使用装饰器修饰 抽象方法
    @abc.abstractmethod
    
    # 使用装饰器修饰 抽象类方法
    @abc.abstractclassmethod
    
    # 使用装饰器修饰 抽象静态方法
    @abc.abstractstaticmethod
    
    # 使用装饰器修饰 抽象属性
    @abc.abstractproperty
    
    
  • 示例
    import abc
    
    
    class Animal(object, metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def jiao(self):
            pass
    
        @abc.abstractclassmethod
        def run(cls):
            pass
    
        def eta(self):
            print(f'{self.name}吃东西')
    
    
    class Dog(Animal):
        def jiao(self):
            print('汪汪汪')
    
        @classmethod
        def run(cls):
            print("小狗会跑...")
    
    class Cat(Animal):
        def jiao(self):
            print('喵喵喵')
    
        @classmethod
        def run(cls):
            print("小猫会跑...")
    
    class Chick(Animal):
        def __init__(self):
            self.name = '小鸡'
    
        def jiao(self):
            print("叽叽叽")
    
        @classmethod
        def run(cls):
            print("小鸡会跑...")
    
    
    # a = Animal()        # TypeError: Can't instantiate abstract class Animal with abstract method jiao
    
    xj = Chick()        # TypeError: Can't instantiate abstract class Chick with abstract method jiao
    # xj.run()
    xj.eta()
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssm基于MVC的舞蹈网站的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;舞蹈网站当然也不能排除在外。舞蹈网站是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采用Java技…

人体关键点检测2:Pytorch实现人体关键点检测(人体姿势估计)含训练代码

人体关键点检测2&#xff1a;Pytorch实现人体关键点检测(人体姿势估计)含训练代码 目录 人体关键点检测2&#xff1a;Pytorch实现人体关键点检测(人体姿势估计)含训练代码 1. 前言 2.人体关键点检测方法 (1)Top-Down(自上而下)方法 (2)Bottom-Up(自下而上)方法&#xff1…

(企业 / 公司项目) 企业项目如何使用jwt?

按照企业的项目然后写的小demo&#xff0c; 自己搞一个登录接口然后调用jwtUtil工具类 后端实现 创建一个通用模块common来实现jwt生成token 登录注册的基本实现逻辑思路 面试| ProcessOn免费在线作图,在线流程图,在线思维导图 注释挺详细的jwtUtil工具类&#xff0c; 封装的…

低功耗模式的通用 MCU ACM32F0X0 系列,具有高整合度、高抗干扰、 高可靠性的特点

ACM32F0X0 系列是一款支持多种低功耗模式的通用 MCU。集成 12 位 1.6 Msps 高精度 ADC 以及比 较器、运放、触控按键控制器、段式 LCD 控制器&#xff0c;内置高性能定时器、多路 UART、LPUART、SPI、I2C 等丰富的通讯外设&#xff0c;内建 AES、TRNG 等信息安全模块&#xff0…

Cannot find cache named ‘‘ for Builder Redis

当引入 Redissson 时&#xff0c;springCache 缓存机制失效 原因&#xff1a;springCache 默认使用本地缓存 Redisson 使用redis 缓存 最后都转成redis了。。。 总感觉哪不对 两者居然不共存

es6从url中获取想要的参数

第一种方法 很古老&#xff0c;通过 split 方法慢慢截取&#xff0c;可行是可行但是这个方法有一个弊端&#xff0c;因为 split 是分割成数组了&#xff0c;只能按照下标的位置获取值&#xff0c;所以就是参数位置一旦发生变化&#xff0c;那么获取到的值也就错位了 let user…

做数据分析为何要学统计学(10)——如何进行时间序列分析

时间序列是由随时间变化的值构成&#xff0c;如产品销量、气温数据等等。通过对时间序列展开分析&#xff0c;能够回答如下问题&#xff1a; &#xff08;1&#xff09;被研究对象的活动特征是否有周期性&#xff08;也称季节性&#xff09;&#xff08;2&#xff09;被研究对…

〖大前端 - 基础入门三大核心之JS篇(51)〗- 面向对象之认识上下文与上下文规则

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

.NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)

WebAppDbTest 项目准备 项目准备1、.net cli 创建项目2、nuget 包引用和项目结构2.1、项目添加相关 nuget 包2.2、WebAppDbTest 项目结构 3、项目代码说明3.1、CSharp/C# 类文件说明3.2、json 配置文件说明 4、项目运行预览 数据库 .db 文件准备1、创建 SQLite 数据库1.1、在 W…

区块链实验室(31) - 交叉编译Ethereum的客户端Geth

编译Geth到X86架构平台 下载Geth源码&#xff0c;直接编译Geth源码&#xff0c;见下图。用file命令观察编译后的文件&#xff0c;架构是x86-64。 编译Geth到Arm64架构平台 直接用命令行编译&#xff0c;同时指定期望的架构为Arm64。编译脚本如下所示。 CGO_ENABLED0 GOOSlin…

VSCode使用Remote-SSH连接服务器时报错:无法与“***”建立连接: XHR failed.

关于VSCode的报错问题&#xff1a;无法与“***”建立连接: XHR failed 问题描述问题理解解决方法手动在本地下载安装包&#xff0c;然后手动传到服务器端 问题描述 是的&#xff0c;我又踩坑了&#xff0c;而且这个弄了好久&#xff0c;也重新装了VSCode软件&#xff0c;好像结…

arm-linux设备fsck命令移植

arm-linux设备fsck命令移植 文章目录 **arm-linux设备fsck命令移植**1、下载e2fsprogs-源码2、解压3、进入源码目录4、配置编译环境&#xff1a;使用以下命令配置交叉编译环境5、测试 1、下载e2fsprogs-源码 首先要确定自己的文件系统格式&#xff0c;IG2000的文件系统是ext4&…

防止域名被攻击或盗刷产生突发高带宽,阿里云国际如何设置带宽上限值?

为防止域名被攻击或盗刷产生突发高带宽&#xff0c;导致产生高额账单&#xff0c;可通过配置带宽封顶&#xff0c;控制用户访问该域名的带宽上限值&#xff0c;减少因突发流量导致的损失。 功能介绍 带宽封顶&#xff0c;即通过设置带宽上限&#xff0c;来控制带宽用量。当指…

博士毕业需要发表几篇cssci论文

大家好&#xff0c;今天来聊聊博士毕业需要发表几篇cssci论文&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 博士毕业需要发表几篇CSSCI论文 背景介绍 CSSCI即“中文社会科学引文索引”&#xff0c;被…

从生态的角度看容器和虚拟化的区别

「执笔人」品高股份 cloud native 资深架构师&#xff1a;继承 概述 容器技术和虚拟机技术都是近些年计算平台的主要的计算虚拟化技术&#xff0c;各家云厂商都提供虚拟机和容器服务&#xff0c;关于容器和虚拟化的区别&#xff0c;业界已经有很多共识了&#xff0c;例如&…

【NR技术】NR NG-RAN整体架构 -功能划分(三)

1 概述 NG-RAN节点包括: gNB&#xff0c;向终端提供NR用户平面和控制平面协议终端;ng-eNB&#xff0c;向终端提供E-UTRA用户平面和控制平面的协议终端。gNB和ng- eNB通过Xn接口相互连接。gnb和NG- eNB也通过NG接口连接到5GC&#xff0c;更具体地说&#xff0c;通过NG-C接口连…

c语言插入排序及希尔排序详解

目录 前言&#xff1a; 插入排序&#xff1a; 希尔排序&#xff1a; 前言&#xff1a; 排序在我们生活中无处不在&#xff0c;比如学生成就排名&#xff0c;商品价格排名等等&#xff0c;所以排序在数据结构的学习中尤为重要&#xff0c;今天就为大家介绍两个经典的排序算法&…

1.9 实战:Postman全局变量

上一小节我们学习了环境管理器以及环境变量&#xff0c;这一小节我们再看另一种变量&#xff0c;全局变量。我们知道环境变量只能在当前环境下使用&#xff0c;如果换了一个环境&#xff0c;那之前的变量就没法使用了。比如我们建了两个环境&#xff0c;一个生产环境&#xff0…

开箱即用的C++决策树简单实现

一个数据结构期末作业&#xff08;有兴趣用的话可以高抬贵手star下⭐~&#xff09;GitHub - mcxiaoxiao/c-Decision-tree: 决策树c简单实现 &#x1f333; c-Decision-tree 附大作业/课设参考文档.doc &#x1f333; c-Decision-tree Introduction &#x1f64c; c-Decision…

PPT插件-好用的插件-超级对齐-大珩助手

超级对齐 包含对齐幻灯、对齐对象、对齐文本三个层级&#xff0c;可共用水平分布、垂直分布、交换位置、统一尺寸、垂直居中、水平居中、绝对居中、靠左对齐、靠右对齐、靠上对齐、靠下对齐 可配合图形缩放使用 可配合文本打散使用 可配合素材库中的一键替换使用 选中场景中的…