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.rhkb.cn/news/293129.html

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

相关文章

【苹果MAC】苹果电脑 LOGI罗技鼠标设置左右切换全屏页面快捷键

首先键盘设置->键盘快捷键 调度中心 设置 f1 f2 为移动一个空间(就可以快捷移动了) 想要鼠标直接控制,就需要下载官方驱动,来设置按键快捷键,触发 F1 F2 安装 LOGI OPTIONS Logi Options 是一款功能强大且便于使用…

前端虚拟滚动列表 vue虚拟列表

前端虚拟滚动列表 在大型的企业级项目中经常要渲染大量的数据,这种长列表是一个很普遍的场景,当列表内容越来越多就会导致页面滑动卡顿、白屏、数据渲染较慢的问题;大数据量列表性能优化,减少真实dom的渲染 看图:绿色…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

第六十三回 呼延灼月夜赚关胜 宋公明雪天擒索超-大模型BERT、ERNIE、GPT和GLM的前世今生

神行太保戴宗报信,关胜人马直奔梁上泊,请宋江早早收兵,解梁山之难。宋江派了花荣到飞虎峪左边埋伏,林冲到右边埋伏,再叫呼延灼带着凌振,在离城十里附近布置了火炮,然后才令大军撤退。 李成闻达…

Kubernetes(K8s)技术解析

1. K8s简介 Kubernetes(简称K8s)是一个开源的容器编排平台,旨在简化容器化应用程序的部署、扩展和管理。为开发者和运维人员提供了丰富的功能和灵活的解决方案,帮助他们更轻松地构建、部署和管理云原生应用程序。以下是关于Kubern…

Oracle 低代码平台 Apex 最新版本 23.2 安装过程

趁春节快结束前,安装了一把APEX ,到目前为此,APEX最新版本为23.2,23.2和21版本有一些变化,只是用于验证,我 是使用的单独模式,没有安装TOMAT,下面列一下安装过程: 1.环境…

云服务器8核32G配置报价大全,腾讯云、阿里云和京东云

8核32G云服务器租用优惠价格表,云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价,腾讯云和京东云是轻量应用服务器,阿里云是云服务器ECS: 阿里云8核32G服务器 阿里云8核32G服务器价格…

阿里云通用算力型u1云服务器配置性能评测及价格参考

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

Kafka入门到实战-第五弹

Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…

Unity 使用TrailRenderer制作拖尾效果

使用TrailRenderer实现拖尾效果,具体操作步骤如下: 1、创建一个空对象 在Unity场景中创建一个空对象 2、添加TrailRenderer组件 选择步骤1创建的空对象,然后在Inspector面板中点击“Add Component”按钮,搜索并添加TrailRende…

中间件安全(apache、tomcat)

靶场: vulfocus Apache Apache HTTP Server 是美国阿帕奇( Apache )基金会的一款开源网页服务器。该服务器具有快速、可靠且可通过简单的API进行扩充的特点,发现 Apache HTTP Server 2.4.50 中针对 CVE - 2021 - 41773 的修复…

算法学习——LeetCode力扣图论篇3(127. 单词接龙、463. 岛屿的周长、684. 冗余连接、685. 冗余连接 II)

算法学习——LeetCode力扣图论篇3 127. 单词接龙 127. 单词接龙 - 力扣(LeetCode) 描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk: 每一对相…

REPLUG:检索增强的黑盒语言模型

论文题目:REPLUG: Retrieval-Augmented Black-Box Language Models   论文日期:2023/05/24   论文地址:https://arxiv.org/abs/2301.12652 文章目录 Abstract1. Introduction2. Background and Related Work2.1 Black-box Language Model…

HarmonyOS 应用开发之FA模型绑定Stage模型ServiceExtensionAbility

本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件。 PageAbility关联访问ServiceExtensionAbility PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceAbility的方式完全相同。 import featureAbility from ohos.ability…

MySQL经验分享:Shell开发问题

背景 之前整理过Python连接使用MySQL的经验,链接如下: pymysql封装总结_pymysql封装类-CSDN博客 相比高级语言,Shell与MySQL开发使用相对会更麻烦一些;由于 shell是linux命令集的概称,是属于命令行的人机界面。Shel…

java计算机网络(一)-- url,tcp,udp,socket

网络编程: 计算机网络 计算机网络指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络协议…

Git如何修改commit注释

1. 修改commit注释 1.1 修改最后一次注释 通过git log查看提交历史信息 输入命令: git commit --amend 进入修改注释界面 第一行是最后一次的注释信息。后续的操作步骤: 1. 按i键进行编辑状态,修改注释信息。 2. 按Esc,wq保…

Rabbit简单模式理解

简单模式 我们以最普通的方式去理解&#xff0c;并没有整合Springboot的那种 这是最简单的模式&#xff0c;一个生产者&#xff0c;一个消费者&#xff0c;一个队列 测试 1、 导包&#xff0c;没整合&#xff0c;不需要编写配置 2、需要生产者消费者 导包 <dependency…

使用Postman进行websocket接口测试

因为最近要搞关于基于AI的文本接口测试.需要用到websocket协议,于是看了一下发现postman也可以测而且很方便 位置 File->New->WebSocket 可以看到不止WebSocket还支持其他的各种协议 使用 首先先点击connect进行连接 连接成功之后可以选择多种文本格式添加请求参数 每…

EXCEL-VB编程实现自动抓取多工作簿多工作表中的单元格数据

一、VB编程基础 1、 EXCEL文件启动宏设置 文件-选项-信任中心-信任中心设置-宏设置-启用所有宏 汇总文件保存必须以宏启动工作簿格式类型进行保存 2、 VB编程界面与入门 参考收藏 https://blog.csdn.net/O_MMMM_O/article/details/107260402?spm1001.2014.3001.5506 二、…