Python学习基础笔记五十五——接口类和抽象类

news2024/11/16 21:34:35

# 设计模式:

《设计模式》 

接口类:Python原生不支持;

抽象类:Python原生支持的。

例:

from abc import abstractmethod, ABCMeta


class Payment(metaclass=ABCMeta):      # 元类 默认的元类是 type 规范类

    @abstractmethod
    def pay(self, money):
        raise NotImplemented    # 没有实现方法


class WeChat(Payment):
    def pay(self, money):
        print("已经使用微信成功支持了%s 元" % money)


class AliPay(Payment):
    def pay(self, money):
        print("已经使用AliPay成功支付了%s 元" % money)


class ApplePay(Payment):
    def pay(self, money):
        print("已经使用ApplePay成功支付了%s 元" % money)


def pay(pay_obj, money):  # 统一支付入口
    pay_obj.pay(money)


# wechat = WeChat()
# wechat.pay()
#
# ali = AliPay()
# ali.pay()
app = ApplePay()

# pay(wechat, 100)
# pay(ali, 100)
pay(app, 100)

接口类,默认是多继承,接口类中的所有方法都必须不能实现——java。

抽象类, 不支持多继承,使用单继承。抽象类中的方法可以有一些代码的实现。——java。

规范子类。

实践中,继承的第一种含义意义并不是很大,甚至常常是有害的,因为它使得子类与基类出现强耦合。

继承的第二种含义非常重要。它又叫“接口继承”。

接口继承实质上是要求“做一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁地处理实现了特定接口的所有对象”, 这在程序设计上,叫做归一化。

归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合。就好像Linux的泛文件概念一样,所有的东西都可以当文件处理,不必关心它是内存、磁盘、网络还是屏幕。(当然对底层设计者,当然可以区分出“字符设备”和“块设备”,然后做出针对性的设计,细致到什么程度,视需求而定。)

依赖倒置原则:
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程

在Python中根本没有一个叫做interface的关键字,上面的代码只是看起来像接口,其实并没有起到接口的作用,子类完全可以不用去实现接口,如果非要去仿真接口的概念,可以借助第三方模块:

抽象类:

Python也有抽象类的概念但同样需要借助模块来实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。

 为什么要有抽象类?

如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。

水果是一个抽象类,吃水果,是吃的一个具体的桃子、一个具体的香蕉……我们永远无法吃到一个叫做水果的东西。

从设计角度来看,如果类是从现实对象抽象而来的,那么抽象类是基于类抽象而来的。

从实现角度来看,抽象类与普通类的不同之处:抽象类中有抽象方法,该类不能被实例化,只能被继承,且子类必须实现抽象方法。这一点与接口有点类似。

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

class All_file(metaclass=abc.ABCMeta):
    all_type='file'
    @abc.abstractmethod        # 定义抽象方法,无需实现功能
    def read(self):
        '子类必须定义读功能'
        pass

    @abc.abstractmethod        # 定义抽象方法,无需实现功能
    def write(self):
        '子类必须定义写功能'
        pass

# class Txt(All_file):
#     pass
#
# t1=Txt() #报错,子类没有定义抽象方法

class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print('文本数据的读取方法')

    def write(self):
        print('文本数据的读取方法')

class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print('硬盘数据的读取方法')

    def write(self):
        print('硬盘数据的读取方法')

class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print('进程数据的读取方法')

    def write(self):
        print('进程数据的读取方法')

wenbenwenjian=Txt()

yingpanwenjian=Sata()

jinchengwenjian=Process()

#这样大家都是被归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()

print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)

抽象类和接口类:

抽象类的本质还是类,指的是一组类的相似性,包括数据属性和函数属性。

而接口只强调函数属性的相似性。

抽象类是一个介于类和接口之间的一个概念。同时具备类和接口的部分特性,可以用来实现归一化设计。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis学习 | 全局配置文件

文章目录一、简介二、各个标签2.1 properties(属性)2.2 settings(设置)2.3 typeAliases(类型命名)2.4 typeHandlers(类型处理器)2.5 plugins(插件)2.6 enviro…

电容这段走线影响这么大?

公众号:高速先生 作者:李远恒 一日,来了一个电源仿真项目,雷工像往常一样熟练的打开了PCB文件,先是例行查板。不查不要紧,一查还真有问题,话不多说直接上图: 定睛一看,这…

星火计划学习笔记——参考线平滑算法解析及实现(以U型弯道场景仿真调试为例)

文章目录1. Apollo参考线介绍1.1 参考线的作用1.2 导航规划的路线1.3 为什么需要重新生成参考线1.4 ReferenceLine数据结构1.5 ReferencePoint数据结构1.6 参考线处理流程1.7 参考线生成2. 参考线平滑算法2.1 参考线平滑算法总览2.2 参考线平滑算法流程2.2.1 设置中间点anchor …

康希通信冲刺科创板上市:上半年收入2亿元,计划募资约8亿元

12月21日,格兰康希通信科技(上海)股份有限公司(下称“康希通信”)在上海证券交易所递交招股书,准备在科创板上市。本次冲刺科创板上市,康希通信计划募资7.82亿元。 据贝多财经了解,康…

Word处理控件Aspose.Words功能演示:在 Java 中将 DOC 或 DOCX 转换为 PNG

aspose.words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

【C++入门基础(上)】

Cross the stars over the moon to meet your better-self. 目录 1 命名空间 1.1 命名空间定义 1.2 命名空间使用 1.2.1 加命名空间名称及作用域限定符 1.2.2 使用using将命名空间中成员引入 1.2.3 使用using namespace 命名空间名称引入 2 C输入&&输出 3 缺省参数…

Mentor-dft 学习笔记 day47-On-Chip Clock Controller Design Description

On-Chip Clock Controller Design Description有三种类型的片上控制器设计:standard, parent, and child。可以根据设计要求选择它们。使用OCC时,必须考虑本节中讨论的设计元素。The Standard OCC 标准OCC为快速捕获提供快速时钟,为换档和慢速…

Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流

InputStream 是 Java 所有字节输入流类的父类,OutputStream 是 Java 所有字节输出流类的父类,它们都是一个抽象类,因此继承它们的子类要重新定义父类中的抽象方法。 这里首先介绍上述两个父类提供的常用方法,然后介绍如何使用它们…

springboot整合shiro + jwt + redis实现权限认证(上手即用)

目录前言项目结构依赖导入建数据库表建表语句使用插件生成增删改查添加MyRealm添加ShiroConfig添加JwtFilterJWT相关得类JwtTokenJwtAudienceJwtHelper添加BeanFactory只贴出主要得类,具体得可以看我的gitee,接口都自测过的。前言 最近项目中涉及到使用…

NEST.JS使用心得

最近部门分享了nest.js技术,旨在前端人员通过项目积累将可重复使用的数据或者自己需要的数据通过nest设计出接口方便快速开发,不需要等待后端开发人员的数据。学习了两天发现nest很有意思,所以来分享下最近两天的学习心得。 nest中文文档&am…

linux下使用命令TC进行网络限流 —— 筑梦之路

Linux 下的流量控制原理 通过对包的排队,我们可以控制数据包的发送方式。这种控制,称之为数据整形,shape the data,包括对数据的以下操作: 增加延时 丢包 重新排列 重复、损坏 速率控制 在 qdisc-class-filter 结构下&#x…

ADI Blackfin DSP处理器-BF533的开发详解64:电子相册的设计(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了将 SD 卡根目录下的所有文件进行文件列表,然后将 480*272 尺寸的 JPEG 文件进行 JPEG 解码,将解…

校园跳蚤市场平台/校园二手交易系统

摘 要 本文论述了校园跳蚤市场平台的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,网络和Mysql数据库设计来实现的,网站主要包括学生注册、学生登录、浏览商品、搜索商品、查看商品并进行购买…

Blender——“苹果”建模

效果图 1.调出点线面面板,衰减编辑 1.1打开blender,点击常规,按A全选物体(摄像头、光源、正方体),按delete删除。 1.2 在3D视图中添加一个经纬球。点击添加,选择网格—>经纬球。 1.3 点击下…

前端JS也可以连点成线(Vue中运用 AntVG6)

前言 什么是 G6?G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明,简单。让用户获得关系数据的 Insight。其实说白了就是我们前端中的绘图工具;基于 G6,用户可以快速搭…

Linux基础知识-文件目录结构及基本属性

1、前言 上一篇我们讲到了Linux 文件类型7种类型,本篇我们说说Linux文件目录结构。 2、Linux 目录树 所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问。Linux 的目录结构如下:…

常见日志框架使用及日志打印规范设计

文章目录一、slf4j 简介二、常用日志框架1)log4jpom 依赖log4j.properties 文件配置测试参考2)logbackpom 依赖logback.xml 配置测试参考3) java.util.logging4)commons loggingpom 依赖配置测试参考5)slf4j-simplepom…

MFC UI控件相关

文章目录UI控件相关CDialog::OnInitDialog() 对话框初始化手动添加UpdateData() 刷新窗口数据DoDataExchange()数据与控件动态绑定afx_msg: 声明一个消息响应函数void AFXAPI DDX_Control( CDataExchange* pDX, int nIDC, CWnd& rControl );DDV_MaxChars()UI控件相关 CDia…

20天学会Rust第一天之Helloword

阿sir今天开始学习Rust了,至于为什么学习呢? 以后再说 我们都知道,程序设计 数据结构 算法。 因此,我们依次学习Rust中数据结构的定义&算法的实现,然后用它们实现一个简单的“hello world” 数据结构 Rust提供…

什么是IoC和AOP

IoC是什么? 控制反转:面向对象的设计的理念。上层建筑依赖下层建筑 理解:行李箱设计 轮子 --> 底盘 --> 箱体 --> 行李箱 如果改动轮子,则底盘、箱体、行李箱都需要进行调整。 依赖注入:将底层类作为参数…