Python学习笔记7:再谈抽象

news/2024/4/20 2:17:59/文章来源:https://blog.csdn.net/qq_36333986/article/details/129150234

再谈抽象

对象

  • 多态 即便你不知道变量指向的是哪种对象,也能够对其执行操作
  • 封装 向外部隐藏不必要的细节。
  • 继承

class Person: def set_name(self, name): self.name = name def get_name(self): return self.name def greet(self): print("Hello, world! I'm {}.".format(self.name))
  1. self 指向对象本身:

如果foo是一个Person实例,可将foo.greet()视为Person.greet(foo)的简写,但后者的多态性更低。

>>>class Cls:def func():print('no self')>>>Cls.func()
no self
>>>cls = Cls()
>>>cls.func()
Traceback (most recent call last):File "<pyshell#6>", line 1, in <module>cls.func()
TypeError: Cls.func() takes 0 positional arguments but 1 was given
  1. 私有:方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可。

不希望名称被修改,又想发出不要从外部修改属性或方法的信号,可用一个下划线打
头。

  1. ‘遮盖’
class MemberCounter: members = 0 def init(self): MemberCounter.members += 1# 新值被写入m1的一个属性中,这个属性遮住了类级变量
>>> m1.members = 'Two' 
>>> m1.members 
'Two' 
>>> m2.members 
2
  1. 探讨继承关系
  • issubclass 确定一个类是否是另一个类的子类

  • isinstance 要确定对象是否是特定类的实例

  • bases 如果你有一个类,并想知道它的基类

  • class 如果你要获悉对象属于哪个类

  1. 接口和内省
  • hasattr(tc, ‘talk’) 检查所需的方法是否存在
  • getattr(tc, ‘talk’, None) 返回对象的属性 callable(getattr(tc, ‘talk’, None)) callable 判断对象是否是可调用的
  • setattr 与getattr功能相反,可用于设置对象的属性
  • dict 要查看对象中存储的所有值

内省:模块inspect

  1. 抽象基类和isinstance
>>>from abc import ABC, abstractmethod >>>class Talker(ABC): @abstractmethod def talk(self): pass>>> h = Herring() 
>>> isinstance(h, Talker) 
False# 可将Herring注册为Talker
>>> Talker.register(Herring) 
<class '__main__.Herring'> 
>>> isinstance(h, Talker) 
True 
>>> issubclass(Herring, Talker) 
True# 这种做法存在一个缺点,就是直接从抽象类派生提供的保障没有了
>>> class Clam: 
... pass 
... 
>>> Talker.register(Clam) 
<class '__main__.Clam'> 
>>> issubclass(Clam, Talker) 
True 
>>> c = Clam() 
>>> isinstance(c, Talker) 
True 
>>> c.talk() 
Traceback (most recent call last): File "<stdin>", line 1, in <module> 
AttributeError: 'Clam' object has no attribute 'talk'

换而言之,应将isinstance返回True视为一种意图表达。在这里,Clam有成为Talker的意图。本着鸭子类型的精神,我们相信它能承担Talker的职责,但可悲的是它失败了。

小结

对象:对象由属性和方法组成。属性不过是属于对象的变量,而方法是存储在属性中的函数。相比于其他函数,(关联的)方法有一个不同之处,那就是它总是将其所属的对象作为第一个参数,而这个参数通常被命名为self。

:类表示一组(或一类)对象,而每个对象都属于特定的类。类的主要任务是定义其实例将包含的方法。

多态:多态指的是能够同样地对待不同类型和类的对象,即无需知道对象属于哪个类就可调用其方法。

封装:对象可能隐藏(封装)其内部状态。在有些语言中,这意味着对象的状态(属性)只能通过其方法来访问。在Python中,所有的属性都是公有的,但直接访问对象的状态时程序员应谨慎行事,因为这可能在不经意间导致状态不一致。

继承:一个类可以是一个或多个类的子类,在这种情况下,子类将继承超类的所有方法。你可指定多个超类,通过这样做可组合正交(独立且不相关)的功能。为此,一种常见的做法是使用一个核心超类以及一个或多个混合超类。

接口和内省:一般而言,你无需过于深入地研究对象,而只依赖于多态来调用所需的方法。然而,如果要确定对象包含哪些方法或属性,有一些函数可供你用来完成这种工作。

抽象基类:使用模块abc可创建抽象基类。抽象基类用于指定子类必须提供哪些功能,却不实现这些功能。

面向对象设计:关于该如何进行面向对象设计以及是否该采用面向对象设计,有很多不同的观点。无论你持什么样的观点,都必须深入理解问题,进而创建出易于理解的设计。

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

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

相关文章

音频(九)——I2S 输出正弦波

I2S 输出正弦波 PC 端&#xff1a;先生成一个正弦波数组MCU 端&#xff1a;将正弦波数组使用 I2S 输出AP 端&#xff1a;接受从 MCU I2S 端口出来的正弦波数据并测量 THDN 等数据 PC 端生成正弦波数组 原理 三角函数的公式 yAsinxy AsinxyAsinx A 表示幅值 代码实现 源…

深入浅出C++ ——容器适配器

文章目录一、容器适配器二、deque类简介1. deque的原理2. deque迭代器3. deque的优点和缺陷4. 为什么选择deque作为stack和queue的底层默认容器一、容器适配器 适配器的概念 适配器是STL六大核心组件之一&#xff0c;它是一种设计模式&#xff0c;该种模式是将一个类的接口转换…

国家级高新区企业主要经济指标(2012-2021年)

数据来源&#xff1a;国家统计局 时间跨度&#xff1a;2012-2021 区域范围&#xff1a;全国&#xff08;及各分类统计指标&#xff09; 指标说明&#xff1a;手工提取最新的中国统计年鉴数据中各个excel指标表&#xff0c;形成各个指标文件的多年度数据&#xff0c;便于多年…

SpringBoot整合Spring Security过滤器链加载执行流程源码分析

文章目录1.引言2.Spring Security过滤器链加载1.2.注册名为 springSecurityFilterChain的过滤器2、查看 DelegatingFilterProxy类3.查看 FilterChainProxy类3.1 查看 doFilterInternal方法。3.2 查看 getFilters方法。4 查看 SecurityFilterChain接口5 查看 SpringBootWebSecur…

90%的人都理解错了HTTP中GET与POST的区别

Get和Post是HTTP请求的两种基本方法&#xff0c;要说它们的区别&#xff0c;接触过WEB开发的人都能说出一二。 最直观的区别就是Get把参数包含在URL中&#xff0c;Post通过request body传递参数。 你可能自己写过无数个Get和Post请求&#xff0c;或者已经看过很多权威网站总结…

制造企业为何要上数字化工厂系统?

以目前形势来看&#xff0c;数字化转型是制造企业生存的关键&#xff0c;而数字化工厂管理系统是一个综合性、系统性的工程&#xff0c;波及整个企业及其供应链生态系统。数字化工厂系统所要实现的互联互通系统集成、数据信息融合和产品全生命周期集成&#xff0c;将方方面面的…

国产真无线蓝牙耳机哪个好?国产半入耳蓝牙耳机推荐

近几年&#xff0c;生活中随处可见的有戴蓝牙耳机的人&#xff0c;而蓝牙耳机也因为使用更便捷、功能更先进受到了不少用户的喜爱。蓝牙耳机按照佩戴方式来划分&#xff0c;可以有入耳式、半入耳式、头戴式等。在此&#xff0c;我来给大家推荐几款国产半入耳蓝牙耳机&#xff0…

数字IC设计工程师是做什么的?

随着我国半导体产业的发展&#xff0c;近几年的新入行的从业人员&#xff0c;除了微电子相关专业的&#xff0c;还有就是物理、机械、数学、计算机等专业&#xff0c;很多人对这一高薪行业充满了好奇&#xff0c;那么数字IC设计工程师到底是做什么的&#xff1f; 首先来看看数…

每日一题——L1-069 胎压监测(15)

L1-069 胎压监测 分数 15 小轿车中有一个系统随时监测四个车轮的胎压&#xff0c;如果四轮胎压不是很平衡&#xff0c;则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序&#…

如何通过一台 iPhone 申请一个 icloud 邮箱账号 后缀为 @icloud.com

总目录 iOS开发笔记目录 从一无所知到入门 文章目录需求关键步骤步骤后续需求 在 iPhone 自带的邮箱软件中添加账号&#xff0c;排第一位的是 iCloud 邮箱&#xff1a; 选 iCloud 之后&#xff1a; 提示信息是exampleicloud.com&#xff0c;也就是说是有icloud.com为域的邮箱…

ElementUI--Dialog 弹框的使用

第一步&#xff1a;从官方文档中拷贝一个对话框到你的页面中 <el-dialog title"为中华民族之崛起而学习" :visible.sync"dialogVisible" width"30%" :fullscreen"false" :close-on-press-escape"false" show-close:close…

【蓝桥集训】第六天——递归

作者&#xff1a;指针不指南吗 专栏&#xff1a;Acwing 蓝桥集训每日一题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录1.树的遍历2.递归求阶乘3.求斐波那契数列1.树的遍历 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后…

人工智能基础部分13-LSTM网络:预测上证指数走势

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下LSTM网络&#xff0c;主要运用于解决序列问题。 一、LSTM网络简单介绍 LSTM又称为&#xff1a;长短期记忆网络&#xff0c;它是一种特殊的 RNN。LSTM网络主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题…

【OpenCV学习笔记01】- 初步使用OpenCV实现人脸识别

想要使用opencv实现人脸识别&#xff0c;我们需要做这样几步&#xff1a; 1.opencv-python的安装 这里我们使用的python的opencv-python库&#xff0c;在安装opencv-python库之前&#xff0c;我们需要安装numpy, matplotlib。 # 安装指令 # 安装 numpy pip install numpy # …

Python 四大主流 Web 编程框架

目前Python的网络编程框架已经多达几十个&#xff0c;逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处&#xff0c;本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架&#xff1a;Django、Tornado、Flask、Twisted。 …

Python os和sys模块

一、os模块 os 模块是 Python中的一个内置模块&#xff0c;也是 Python中整理文件和目录最为常用的模块。 该模块提供了非常丰富的方法用来处理文件和目录。比如&#xff1a;显示当前目录下所有文件/删除某个文件/获取文件大小 1、获取当前的工作路径 在 Python 中&#xff0…

linux查看WWN号及常见问题解决

linux查看WWN号及常见问题解决查看WWN号查看WWID号查询常见问题查看WWN号 要查看CentOS 6.7版本的WWN号&#xff0c;可以执行以下步骤&#xff1a; 1.确保已经连接了存储设备。 lspci | grep -i fibre2.在终端中输入命令&#xff1a;lsscsi&#xff0c;然后按 Enter 键。该命令…

redhawk:GSC file与STA file

1.GSC file redhawk做lowpower分析时需要GSC&#xff08;Global Switching Configuration&#xff09;file指导block/instance/power domain的开关状态。 Syntax&#xff08;in GSR file&#xff09;: GSC_FILES <gsc_FilePathName> Syntax&#xff08;in GSC file&a…

易基因|RRBS单碱基绘制580种动物的基因组规模DNA甲基化谱:Nature子刊

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。2023年01月16日&#xff0c;奥地利科学院分子医学研究中心(CeMM)研究团队在《Nat Commun》杂志发表了题为“Comparative analysis of genome-scale, base-resolution DNA methylation prof…

【Git】Git是什么?简单说说Git的工作机制?Git的常用命令有那些?

目录 一、Git是什么? 二、简单说说Git的工作机制&#xff1f; 三、Git的常用命令有那些&#xff1f; &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 一、Git是什么? Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可…