Python 面向对象知识点补充

Python 面向对象知识点补充

【一】Mixins机制

【1】概念

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

【2】代码

class PeaShooter:passclass 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 abcclass RegisterLogin(metaclass=abc.ABCMeta):@abc.abstractmethoddef login(self):pass@abc.abstractmethoddef register(self):passclass BankSys(RegisterLogin):def login(self):passdef register(self):passby = BankSys() 
# 尝试实例化抽象基类
# a = RegisterLogin() # 报错

【3】解释

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

【三】类的特殊属性

class Base1:pass
class Base2(Base1):pass
class Base3(Base2):passclass 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:passclass B(A):passa = A()
print(isinstance(a, A)) # True
print(isinstance(a, B)) # Falseprint(issubclass(B, A)) # True
print(issubclass(A, B)) # Falseprint(issubclass(A, object)) # True
print(issubclass(B, object)) # True
  • isinstance()还可以用来判断类型
print(isinstance(1, float)) # False
print(type(1.1) == int) # Falseprint(isinstance("1", str)) # True
print(type("") == str) # True

【五】总结

请添加图片描述

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

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

相关文章

Java:File类详解

文章目录 1、概述2、创建File实例3、常用方法3.1 获取功能的方法3.2 绝对路径和相对路径3.3 判断功能的方法3.4 创建删除功能的方法3.5 文件过滤功能的方法 4、文件夹的遍历5、综合练习5.1 创建文件夹5.2 查找文件&#xff08;不考虑子文件夹&#xff09;5.3 查找文件&#xff…

一些数字设计及验证的笔试题(6)

一些数字设计及验证的笔试题汇总&#xff0c;仅供参考。 文章目录 一、什么是亚稳态&#xff1f;如何改善&#xff1f; 二、C语言下列关系符号中&#xff0c;优先级最低的是哪个&#xff1f; 三、下面哪种不属于Vim编辑器的工作模式&#xff1f; 四、在以下的哪个timescale…

python爬虫,简单的requests的get请求,百度搜索实例

1、百度搜索实例 import requests url https://www.baidu.com/s? # key_word 迪丽热巴 key_word input(输入搜索内容&#xff1a;) headers {User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537…

来瞅瞅Java 11都有啥新特性

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff01;今天小黑要和咱们聊聊Java 11&#xff0c;这个在Java发展史上占有一席之地的版本。说起Java&#xff0c;咱们都知道&#xff0c;它是一门历史悠久又持续发展的编程语言。Java不仅因其“一次编写&#xff0c;到处…

Sentinel限流熔断

官网&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html github文档&#xff1a;https://github.com/alibaba/Sentinel/wiki Sentinel 是一款面向分布式服务架构的轻量级流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、 熔断降级 、系…

百度地图打点性能优化(海量点、mapv)

文章目录 百度地图打点性能优化&#xff08;海量点、mapv&#xff09;原因优化方法数据获取方面页面加载方面 参考资料 百度地图打点性能优化&#xff08;海量点、mapv&#xff09; 原因 在百度地图api中&#xff0c;默认的点是下图的红点 而这种点位比较多的时候&#xff0c…

61、python - 手写卷积、bn、池化、全连接、激活、ResBlock

这篇算是一个总结,之前的原理部分在介绍各个算法时候,已经加入了每个算法的代码编写介绍。 给出的示例是用 python 语法来实现的,也是实现的最基础的版本,这也是我们手写算法的初衷:不调用其他的三方库,从最基础的手写算法开始,一步步完成算法实现和性能优化,这样可以…

ElasticSearch学习笔记-SpringBoot整合Elasticsearch7

项目最近需要接入Elasticsearch7&#xff0c;顺带记录下笔记。 Elasticsearch依赖包版本 <properties><elasticsearch.version>7.9.3</elasticsearch.version><elasticsearch.rest.version>7.9.3</elasticsearch.rest.version> </propertie…

Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。

本文主要记录遇到vscode运行HTML文件提示&#xff1a; Windows找不到文件‘chrome‘&#xff0c;请确定文件名是否正确后&#xff0c;再试一次。问题的解决办法。 目录 一、打开设置 二 、搜索Live Server Config &#xff08;1&#xff09;安装Live Server插件 &#xff0…

如何使用gflags.exe查看内存来源

使用 gflags.exe 工具并不能直接查看内存的来源&#xff0c;即它不能告诉你某块内存是在哪个函数调用或代码行中分配的。然而&#xff0c;gflags 可以结合其他调试工具帮助你检测和分析内存问题&#xff0c;如内存泄漏、堆溢出等。 例如&#xff0c;如果你想追踪某个进程的内存…

asp网站代码层面实现防cc攻击

CC主要是用来攻击页面的.大家都有这样的经历&#xff0c;就是在访问论坛时&#xff0c;如果这个论坛比较大&#xff0c;访问的人比较多&#xff0c;打开页面的速度会比较慢&#xff0c;对不?!一般来说&#xff0c;访问的人越多&#xff0c;论坛的页面越多&#xff0c;数据库就…

Unity ab包如何加密

「ab包」全称为 AssetBundle &#xff0c;是Unity提供的一种资源存储压缩包。其中储存了游戏的资源&#xff0c;如图片、模型、纹理、音视频、代码等文件。 由于ab包具有灵活储存、支持热更、包体较小且便于管理等优势&#xff0c;已经成为了市面上主流的游戏资源压缩方式。 …

服务器维护日常的工作有哪些内容

服务器维护是确保服务器正常运行&#xff0c;保障数据安全和系统稳定的重要工作&#xff0c;小德将从硬件检查、系统监控、故障排查、备份恢复等方面介绍服务器维护的日常工作内容。 一、硬件检查 1. 检查服务器的电源线、网线、硬盘等连接是否正常&#xff0c;确保设备完好无…

编译原理Lab4-使用LightIR框架自动产生cminus-f语言的LLVM IR

[[#实验框架|实验框架]][[#实验过程|实验过程]] [[#实验过程#全局变量的设计|全局变量的设计]][[#实验过程#1ASTProgram|1ASTProgram]][[#实验过程#2ASTNum|2ASTNum]][[#实验过程#3ASTVarDeclaration|3ASTVarDeclaration]][[#实验过程#4ASTFunDeclaration|4ASTFunDeclaration]]…

LeetCode每日一题 | 383. 赎金信

文章目录 LeetCode-383. 赎金信题目描述问题分析程序代码&#xff08;Golang 版本&#xff09; LeetCode-383. 赎金信 题目描述 原题链接 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#…

【代码片段】Linux C++打印当前函数调用堆栈

在开发大型项目时&#xff0c;尤其是多线程情况下&#xff0c;一般无法使用断点调试&#xff0c;这时候将当前函数的调用堆栈打印出来是非常有必要和有效的问题排查手段。 这里记录一段Linux环境下&#xff0c;打印函数堆栈的代码。 void get_native_callstack(std::string &a…

【ThreeJS入门——】WEB 3D可视化技术——threejs

简介 网页上已经可以做出很多复杂的动画&#xff0c;精美的效果。下图就是通过WebGL在网页中绘制高性能的3D图形。 threejs是一个让用户通过javascript入手进入搭建webgl项目的类库。 1、搭建第一个场景和物体 三维的物体要渲染在二维的屏幕上。首先要创建一个场景来放置物体…

c++学习第八讲---类和对象---继承

继承&#xff1a; 使子类&#xff08;派生类&#xff09;拥有与父类&#xff08;基类&#xff09;相同的成员&#xff0c;以节约代码量。 1.继承的基本语法&#xff1a; class 子类名&#xff1a;继承方式 父类名{} &#xff1b; 例&#xff1a; class father { public:in…

计算机毕业设计 | SpringBoot+vue移动端音乐网站 音乐播放器(附源码)

1&#xff0c;项目背景 随着计算机技术的发展&#xff0c;网络技术对我们生活和工作显得越来越重要&#xff0c;特别是现在信息高度发达的今天&#xff0c;人们对最新信息的需求和发布迫切的需要及时性。为了满足不同人们对网络需求&#xff0c;各种特色&#xff0c;各种主题的…

Plantuml之nwdiag网络图语法介绍(二十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…