Python 面向对象知识点补充

Python 面向对象知识点补充

【一】Mixins机制

【1】概念

  • Mixins:是一种在面向对象编程中,通过组合多个类的特称来创建一个新类的技术
  • 核心机制:就是在多继承背景下尽可能地提升多继承的可读性
  • 通过命名规范来满足人的思维习惯(什么是什么的关系

【2】代码

class PeaShooter:
    pass

class ShootMixin:
    def shoot(self):
        print("I can shoot pea")

class FirePeaShooter(ShootMixin, PeaShooter):
    pass
class IcePeaShooter(ShootMixin, PeaShooter):
    pass

【3】解释

  • 在这个例子中火焰豌豆射手和寒冰豌豆射手都实现了多继承,不过他们继承的第一个类起名为ShootMixin,而不是Shoot,这不影响功能。只是告诉读代码的人,这个类是一个Mixin类表示混入(mix-in),这种命名方式就是明确的告诉别人,这个类作为功能添加到子类中,而不是作为父类
  • 注意要点
    • 这个类表示功能,而不是某个物品
    • 一般以Mixin、able、ible为后缀
    • 责任单一,即多个功能要写多个Mixin类
    • 父、子类中都需要这个功能时,只放在父类里面
    • 不依赖于子类的实现;子类即便没有继承这个Mixin类,mIxin类也可以正常工作
    • 通常放在子类括号的左边
    • 当定义的Mixin类越多,子类代码可读性越差,不推荐继承的结构过于复杂

【二】abc模块

【1】概念

  • abc模块是python中的抽象基类模块,它提供了一种机制来定义抽象基类以及在子类中强制实现特定的方法
  • 抽象基类不能被实例化的类,主要目的是作为其他类的基类强制子类实现指定的方法

【2】代码

import abc

class RegisterLogin(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def login(self):
        pass
    @abc.abstractmethod
    def register(self):
        pass

class BankSys(RegisterLogin):
    def login(self):
        pass
    def register(self):
        pass

by = BankSys() 
# 尝试实例化抽象基类
# a = RegisterLogin() # 报错

【3】解释

  • 父类中需要继承ABC类ABC类抽象基类`的基类)
  • 使用**@abstractmethod装饰器定义抽象方法**
  • 如果子类没有定义这个方法,在实例化时会报错
  • 抽象基类实例化也会报错

【三】类的特殊属性

class Base1:
    pass
class Base2(Base1):
    pass
class Base3(Base2):
    pass

class A(Base3, Base1):
    """文档注释"""
    pass

【1】__name__

  • 获取类的名字,字符串格式
print(A.__name__, type(A.__name__))
# A <class 'str'>

【2】__doc__

  • 获取类的注释文档,字符串格式
print(A.__doc__, type(A.__doc__))
# 文档注释 <class 'str'>

【3】__base__

  • 获取类的第一个父类,返回一个类
print(A.__base__, type(A.__base__))
# <class '__main__.Base3'> <class 'type'>

【4】__bases__

  • 获取类的所有父类(仅第一层),返回元组格式
print(A.__name__, type(A.__name__))
# A <class 'str'>

【5】__dict__

  • 获取类的字典属性,表示类的名称空间
  • mappingproxy类型,表示是一个映射试图,保护类属性不被意外修改
print(A.__dict__, type(A.__dict__))
# {'__module__': '__main__', '__doc__': '文档注释'} <class 'mappingproxy'>xxxxxxxxxx print(A.__dict__, type(A.__dict__))# {'__module__': '__main__', '__doc__': '文档注释'} <class 'mappingproxy'>name__))# A <class 'str'>

【6】__module__

  • 获取类定义所在的模块,字符串格式
print(A.__module__, type(A.__module__))
# __main__ <class 'str'>

【7】__class__

  • 获取对象所属的类名
a = A()
print(a.__class__, type(a.__class__))
# <class '__main__.A'> <class 'type'>

【四】两个判断函数

  • isinstance(obj, cls)
    • 判断obj是不是cls的实例
  • issubclass(sub, super)
    • 判读sub是不是super的子类
class A:
    pass

class B(A):
    pass


a = A()
print(isinstance(a, A)) # True
print(isinstance(a, B)) # False

print(issubclass(B, A)) # True
print(issubclass(A, B)) # False

print(issubclass(A, object)) # True
print(issubclass(B, object)) # True
  • isinstance()还可以用来判断类型
print(isinstance(1, float)) # False
print(type(1.1) == int) # False

print(isinstance("1", str)) # True
print(type("") == str) # True

【五】总结

请添加图片描述

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

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

相关文章

【微机原理与接口技术】期末模拟卷(2)

有不会的题可以后台问我的哦&#xff0c;看见了就会回。 本文章主要是微机的模拟卷&#xff0c;最后祝大家期末心想事成 1、微处理器为8086数据总线和地址总线为 ()位 A.16 16 B.16 32 C.16 20 D.32 32 8086是16位寄存器&#xff0c;即需要16位数据线 2、微型计算机硬件系…

小程序实现绘制图片 保存到手机

HTML <template><view><canvas canvas-id"myCanvas" :style"{height:380px,width:wWidthpx,background:#FFFFFF}"></canvas><view class"textCenter"><button click"saveCanvas">保存图片</b…

uniapp获取手机当前信息及应用版本

appVersion 是app端查询的数据信息 appWgtVersion 是浏览器端查询的数据信息 onLoad() {const systemInfo uni.getSystemInfoSync();console.log(systemInfo);// #ifdef H5const uniAppVersion systemInfo.appVersion;// #endif// #ifndef H5const uniAppVersion systemIn…

报文大小限制、请求体类型总结

文章目录 1. 各节点请求体有无限制1.1 http协议1.2 TCP/IP层限制1.3 浏览器1.4 nginx1.5 gateway1.6 tomcat1.7 springboot1.8 内存、磁盘处理不了一切白搭 2. 请求体类型2.1 application/x-www-form-urlencoded2.2 multipart/form-data2.3 application/json2.4 text/plain2.5 …

从贝索斯、英伟达们手里又融了7000万美元,Perplexity还真奔着取代Google去了

AI应用千千万&#xff0c;到底哪些才真正值得你花钱花时间&#xff1f; 对于这个问题&#xff0c;埃森哲人工智能高级顾问、《哈佛商业评论》播客频道主持人Azeem Azhar给出的答案是&#xff1a;“如果必须选择一个&#xff0c;我不会选ChatGPT或Claude&#xff0c;而是Perple…

神经网络的核心:简单易懂理解 PyTorch 非线性激活函数

目录 torch.nn子函数非线性激活详解 nn.Softmin Softmin 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax Softmax 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax2d Softmax2d 函数简介 函数工作原理 输入…

数据摆渡会遇到哪些风险?要如何应对?

数据摆渡&#xff08;Data Shuttle&#xff09;是一种在不同网络环境之间安全、可控地传输数据的过程。在企业环境中&#xff0c;这通常涉及到将数据从内部网络&#xff08;内网&#xff09;传输到外部网络&#xff08;外网&#xff09;&#xff0c;或者在多个隔离的内部网络之…

安恒2023全球高级威胁态势研究报告(网盘下载)

《2023全球高级威胁态势研究报告》 2023 年&#xff0c;一系列新兴威胁的不断涌现&#xff0c;使得网络安全面临着前所未有的挑战。过去一年&#xff0c;我们目睹了地缘政治动荡、科技进步和人类活动的交织&#xff0c;进一步深刻地塑造了数字时代的未来。 在此背景下&#xff…

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

3.2 MAPPING THREADS TO MULTIDIMENSIONAL DATA

1D、2D或3D线程组织的选择通常基于数据的性质。图片是2D像素阵列。使用由2D块组成的2D网格通常可以方便地处理图片中的像素。图3.2显示了处理7662图片P的这种安排&#xff08;水平或x方向为76像素&#xff0c;垂直或y方向为62像素&#xff09;。假设我们决定使用16 x 16块&…

MyBatis实战指南(一):从概念到特点,助你快速上手,提升开发效率!

嗨~ 今天的你过得还好吗&#xff1f; 如果命运是世界上最烂的编剧 你就要争取做你人生最好的演员 &#x1f31e; - 2024.01.08 - MyBatis是一个优秀的持久层框架&#xff0c;它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取…

【百科物理】-2.重力与浮力

导入 问题&#xff1a; 灯掉下来&#xff0c;重力太大&#xff0c;掉下来。 重力来源于地球&#xff0c;地球上所有的东西都受重力向下落。 搬箱子&#xff0c;搬东西沉&#xff0c;是受重力的影响&#xff0c;重力的方向是竖直向下的。 万有引力&#xff1a;任何两个物体之间都…

flutter项目用vscode打包apk包,完美运行到手机上

1.创建密钥库 执行以下命令: keytool -genkey -v -keystore F:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天) 2.填写密钥内容 执行以上命令后会提示一次输入密钥库密码、确认…

MySQL取出N列里最大or最小的一个数据

如题&#xff0c;现在有3列&#xff0c;都是数字类型&#xff0c;要取出这3列里最大或最小的的一个数字 -- N列取最小 SELECT LEAST(temperature_a,temperature_b,temperature_c) min FROM infrared_heat-- N列取最大 SELECT GREATEST(temperature_a,temperature_b,temperat…

解决matplotlib中文乱码问题

一、修改配置文件&#xff0c;一劳永逸的方法 1. 首先&#xff0c;下载SimHei字体&#xff08;即SimHei.tff包&#xff09;下载地址&#xff1a;SimHei.ttf|字体下载 2. 下载好之后&#xff0c;找到matplotlib文件夹&#xff0c;如下图所示&#xff1a; 如果找不到matplotlib…

服务容错-熔断策略之断路器hystrix-go

文章目录 概要一、服务熔断二、断路器模式三、hystrix-go3.1、使用3.2、源码 四、参考 概要 微服务先行者Martin Fowler与James Lewis在文章microservices中指出了微服务的九大特征&#xff0c;其中一个便是容错性设计(Design for failure)。正如文章中提到的&#xff0c;微服…

结构型设计模式——桥接模式

桥接模式 如果一个系统需要在抽象化和具体化之间增加更多的灵活性&#xff0c;避免在两个层次之间建立静态的继承关系&#xff0c;通过桥接模式可以使它们在抽象层建立一个关联关系&#xff08;参考案例&#xff1a;即视频文件格式对象成为操作系统类的一个成员变量&#xff0…

Redis之集群方案比较

哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可用性等各方面表现一般&a…

Java智慧工地可视化APP信息管理平台源码(项目端、监管端、数据大屏端、APP端)

一、智慧工地信息化解决方案 智慧工地系统以推进施工过程管理信息化、数字化、智慧化为手段&#xff0c;促进第五代通信技术 (5G) 、大数据、智能设备、人工智能等与建筑工程管理进一步融合。智慧化工地建设全面加速&#xff0c;以数字技术助力建筑工地转型升级、提速增效、提…

SSC使用总结

文章目录 写在前面一、SSC工具能做什么二、下载安装三、使用教程1. 新建2. 信息配置3. 生成源码4. 创建EXCEL配置文件 写在前面 Slave Stack Code Tool&#xff08;简称SSC Tool&#xff0c;后文直接用SSC表示&#xff09;&#xff0c;它是EtherCAT从站协议栈生成工具&#xf…