9.Python类与对象

1 面向对象

类和对象都是面向对象中的重要概念。面向对象是一种编程思想, 即按照真实世界的思维方式构建软件系统。

例如,在真实世界的校园里有学生和老师,学生有学号、姓名、所 在班级等属性(数据),还有学习、提问、吃饭和走路等动作(方法) 。如果我们要开发一个校园管理系统,那么在构建软件系统时,也会有 学生和老师等“类”,张同学、李同学是学生类的个体,被称为“对象”, “对象”也被称为“实例”。

2 定义类

Python中的数据类型都是类,我们可以自定义类,即创建一种新的 数据类型。Python中类的定义语法格式如右图所示。 定义小汽车(Car)类的代码如下:

小汽车(Car)类继承了object类,object类是所有类的根类,在Pyth on中任何一个类(除object外)都直接或间接地继承了object,直接继承 object时(object)部分的代码可以省略。

3 创建对象

类相当于一个模板,依据这样的模板来创建对象,就是类的实例化 ,所以对象也被称为“实例”。

4 类的成员

4.1 实例变量

实例变量就是对象个体特有的“数据”,例如狗狗的名称和年龄等。

通过Python指令运行文件,输出结果。

4.2 构造方法:

类中的__init__()方法是一个非常特殊的方法,用来创建和初始 化实例变量,这种方法就是“构造方法”。在定义__init__()方法时, 它的第1个参数应该是self,之后的参数用来初始化实例变量。调用构造 方法时不需要传入self参数。

构造方法的示例代码如下:

4.3 实例方法

实例方法与实例变量一样,都是某个实例(或对象)个体特有的方 法。

定义实例方法时,它的第1个参数也应该是self,这会将当前实例与 该方法绑定起来,这也说明该方法属于实例。在调用方法时不需要传入 self,类似于构造方法。

下面看一个定义实例方法的示例:

4.4 类变量

类变量是属于类的变量,不属于单个对象。

例如,有一个Account(银行账户)类,它有三个成员变量:amoun t(账户金额)、interest_rate (利率)和owner(账户名)。amount和ow ner对于每一个账户都是不同的,而interest_rate对于所有账户都是相同 的。amount和owners是实例变量,interest_rate是所有账户实例共享的变 量,它属于类,被称为“类变量”。 类变量的示例代码如下:

4.5 类方法

类方法与类变量类似,属于类,不属于个体实例。在定义类方法时 ,它的第1个参数不是self,而是类本身。

5 封装性

封装性是面向对象重要的基本特性之一。封装隐藏了对象的内部细 节,只保留有限的对外接口,外部调用者不用关心对象的内部细节,使 得操作对象变得简单。

例如,一台计算机内部极其复杂,有主板、CPU、硬盘和内存等, 而一般人不需要了解它的内部细节。计算机制造商用机箱把计算机封装 起来,对外提供了一些接口,如鼠标、键盘和显示器等,使用计算机就 变得非常简单。

5.1 私有变量

为了防止外部调用者随意存取类的内部数据(成员变量),内部数 据(成员变量)会被封装为“私有变量”。外部调用者只能通过方法调用 私有变量。

在默认情况下,Python中的变量是公有的,可以在类的外部访问它 们。如果想让它们成为私有变量,则在变量前加上双下画线(__)即可 。 示例代码如下:

由于在类的外部不可以访问私有变量,因此上述代码在运行时会发 生错误,通过Python指令运行文件,输出结果。

5.2 私有方法

私有方法与私有变量的封装是类似的,在方法前加上双下画线(__ )就是私有方法了。示例代码如下:

由于在类的外部不可以访问私有方法,因此上述代码在运行时会发 生错误,通过Python指令运行文件,输出结果。

5.3 使用属性

为了实现对象的封装,在一个类中不应该有公有的成员变量,这些 成员变量应该被设计为私有的,然后通过公有的set (赋值)和get(取 值)方法访问。 使用set和get方法进行封装,示例代码如下:

使用属性方式修改上面的示例,代码如下:

6 继承性

继承性也是面向对象重要的基本特性之一。

在现实世界中继承关系无处不在。例如猫与动物之间的关系:猫是 一种特殊动物,具有动物的全部特征和行为,即数据和操作。在面向对 象中动物是一般类,被称为“父类”;猫是特殊类,被称为“子类”。特殊 类拥有一般类的全部数据和操作,可称之为子类继承父类。

6.1 Python中的继承

在Python中声明子类继承父类,语法很简单,定义类时在类的后面 使用一对小括号指定它的父类就可以了。 下面是动物类继承图。

通过Python指令运行文件,输出结果:

6.2 多继承

在Python中,当子类继承多个父类时,如果在多个父类中有相同的 成员方法或成员变量,则子类优先继承左边父类中的成员方法或成员变 量,从左到右继承级别从高到低。 示例代码如下:

6.3 方法重写

如果子类的方法名与父类的方法名相同,则在这种情况下,子类的 方法会重写(Override)父类的同名方法。

7 多态性

多态性也是面向对象重要的基本特性之一。“多态”指对象可以表现 出多种形态。 例如,猫、狗、鸭子都属于动物,它们有“叫”和“动”等行为,但是 叫的方式不同,动的方式也不同。

7.1 继承与多态

在多个子类继承父类,并重写父类方法后,这些子类所创建的对象 之间就是多态的。这些对象采用不同的方式实现父类方法。 示例代码如下:

7.2 鸭子类型测试与多态

Python的多态性更加灵活,支持鸭子类型测试。鸭子类型测试指: 若看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么 这只鸟可以被称为鸭子。

由于支持鸭子类型测试,所以Python解释器不检查发生多态的对象 是否继承了同一个父类,只要它们有相同的行为(方法),它们之间就 是多态的。 例如,我们设计一个函数start(),它接收具有“叫”speak()方法 的对象,代码如下:

8 练一练

1 在下列选项中,哪些是类的成员。()

A.成员变量

B.成员方法

C.属性

D.实例变量

2 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。

1)在Python中,类具有面向对象的基本特性,即封装性、继承性 和多态性。()

2)__init__()方法用来创建和初始化实例变量,这种方法就是“ 构造方法”。()

3)类方法不需要与实例绑定,需要与类绑定,在定义时它的第1个 参数不是self。()

4)实例方法是在类中定义的,它的第1个参数也应该是self,这个 过程是将当前实例与该方法绑定起来。()

5)公有成员变量就是在变量前加上两个下画线(__)。()

6)属性是为了替代get()方法和set()方法。()

7)子类继承父类时继承父类中的所有成员变量和方法。()

8)Python中的继承是单继承。()

3 请介绍什么是“鸭子类型”?

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

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

相关文章

标题:AI大模型学习:解放智能的未来之路

随着技术的不断进步和发展,AI大模型学习成为了当前人工智能领域的热点话题。AI大模型学习不仅仅需要研究者具备深厚的数学基础和编程能力,还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法,AI大模型学习能够不断提升模型…

MySQL核心命令详解与实战,一文掌握MySQL使用

文章目录 文章简介演示库表创建数据库表选择数据库删除数据库创建表删除表向表中插入数据更新数据删除数据查询数据WHERE 操作符聚合函数LIKE 子句分组 GROUP BY HAVINGORDER BY(排序) 语句LIMIT 操作符 分页查询多表查询-联合查询 UNION 操作符多表查询-连接的使用-JOIN语句编…

本地GPU调用失败问题解决3重新配置anaconda环境(成功)

1、右键“以管理员身份”打开anaconda prompt conda create -n python 3.9 2、使用官方下载源的配置 3、修改conda下载超时 conda config --set remote_connect_timeout_secs 60 conda config --set remote_read_timeout_secs 100 查看配置结果conda config --show 配置内…

122、内网安全——域信息收集应用网络凭据CS插件AdfindBloodHound

文章目录 理解域域信息搜集 理解域 假设有1000台计算机,运维人员需要为每一台计算机进行软件的安装、环境部署,实际上运维人员不可能亲自对每一台计算机进行软件的安装和环境部署。实际,将所有1000台计算机放入一个域中,域内有一…

多传感器标定——相机内参标定

文章目录 一、前言二、内参标定流程三、如何提升标定精度四、精度验证五、内外参联合标定 一、前言 之前写过一篇文章(相机内参、外参、畸变系数简介),感觉应该把这几个东西说的还算明白,但是里边并没有深究该如何进行标定&#…

【软考---系统架构设计师】物联网和云计算

目录 一、物联网 二、云计算 一、物联网 物联网是实现物物相连的互联网络,其内涵包括两个方面:第一,物联网的核心和基础仍是互联网,是在互联网基础上延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物…

牛客NC153 信封嵌套问题【中等 动态规划,最长递增子序列 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/9bf77b5b018d4d24951c9a7edb40408f 相同的题目: https://www.lintcode.com/problem/602 思路 本质是求最长子序列问题envelopes 先按 w 升序排序,再按 h 降序 排序,只需考虑h…

一条SQL在MySQL中的执行过程

图解: 第⼀步:连接器 过程 1. 建⽴连接:与客户端进⾏ TCP 三次握⼿建⽴连接; 2. 校验密码:校验客户端的⽤户名和密码,如果⽤户名或密码不对,则会报错;3. 权限判断&#xff1a…

手机无线投屏到windows11电脑

1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息

Appium基础操作元素定位实操入门

一、基础操作 1、安装和配置:包括安装 Appium 服务器、设置环境变量等。2、启动服务器:使用命令行或相关工具启动 Appium 服务器。3、连接设备或模拟器:将测试设备或模拟器连接到计算机上。4、识别应用程序:指定要测试的应用程序的相关信息,如包名和活动名。上述1~4内容可…

金融衍生品市场

金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值(Hedging) 组合多头头寸(long position)与空头头寸(short position)例:股票与股指期货 投机 衍生金融工具 远期合约 定义:在将来…

翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目,好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作! 我曾经在Grab工作,这是东南亚的一家共享出行公司,但我对工作感到沮丧,想要进入FAANG公司,但我…

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

ZooKeeper 宕机如何应对

ZooKeeper 本身也是集群&#xff0c;推荐配置奇数个服务器。因为宕机就需要选举&#xff0c;选举需要半数 1 票才能通过&#xff0c;为了避免打成平手。进来不用偶数个服务器。 如果是 Follower 宕机了&#xff0c;没关系不影响任何使用。用户无感知。如果 Leader 宕机&#x…

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局 导读 这篇文章开始&#xff0c;依次学习鸿蒙的八大布局&#xff0c;这是第一篇&#xff0c;所以顺带也会聊聊通用属性。 文档地址 文档地址 如何定义一个线性布局 Android中是使用LinearLayout来构建线性布局的&#xff0c…

ChatGPT chrome扩展下载与安装

官方下载地址 https://chromewebstore.google.com/detail/lpbhmlbicmgjpacbofijdfpcplfhakeo 截图 安装 离线安装 下载地址 https://static.xutongbao.top/app/chatgpt-chrome-crx-v0.0.7.zip 打开链接 chrome://extensions/ 人工智能学习网站 https://chat.xutongbao.to…

谷粒商城——RabbitMQ

0. 消息中间件 1.RabbitMQ的核心概念 2. 工作流程 整体架构&#xff1a; 相关细节&#xff1a; 上述要注意的是&#xff1a; 路由键包含在message的头中&#xff0c;其作用是用于指定该消息存储与哪个消息队列中。 信道是客户端&#xff08;包括生产者和消费者&#xff09;用…

Vue 组件化编程

Vue 组件化编程 非单文件组件 定义组件 使用Vue.extend(options&#xff09;创建 不要写eldata要写成函数&#xff0c;避免组件被复用时&#xff0c;数据存在引用关系 注册组件 局部注册&#xff1a;new Vue()的时候&#xff0c;options传入components全局注册&#xff1a;V…

使用OpenSSL工具验证证书

验证证书的原理涉及到公开密钥基础设施&#xff08;Public Key Infrastructure, PKI&#xff09;和数字证书的加密原理。以下是验证证书文件的基本原理和步骤&#xff1a; 证书组成&#xff1a;SSL 证书通常包含公钥、证书所有者的信息、证书颁发机构&#xff08;Certificate A…

回收站删除以后还能撤销吗 回收站删除以后怎么找回 回收站清空了怎么恢复 easyrecovery数据恢复软件

回收站删除以后能撤销吗&#xff1f;有不少网友前一秒清空回收站&#xff0c;后一秒就开始在网上疯狂搜寻如何撤销删除回收站的办法。实际上&#xff0c;清空回收站并不可怕&#xff0c;被删除的数据仍然保存在我们的电脑硬盘中。今天我为大家介绍回收站删除以后怎么找回数据的…