python的类和实例_Python使用类和实例

我们可以使用类来模拟现实世界中的很多情景。类编写好后,你的大部分时间都将花在使用根据类创建的实例上。你需要执行的一个重要任务是修改实例的属性。你可以直接修改实例的属性,也可以编写方法以特定的方式进行修改。

Car类

下面来编写一个表示汽车的类,它存储了有关汽车的信息,还有一个汇总这些信息的方法:

1561366773109835.png

在(1)处,我们定义了方法__init__()。与前面的Dog类中一样,这个方法的第一个形参为self;我们还在这个方法中包含了另外三个形参:make、model和year。方法__init__()接受这些形参的值,并将它们存储在根据这个类创建的实例的属性中。创建新的Car实例时,我们需要指定其制造商、型号和生产年份。

在(2)处,我们定义了一个名为get_descriptive_name()的方法,它使用属性year、make和model创建一个对汽车进行描述的字符串,让我们无需分别打印每个属性的值。为在这个方法中访问属性的值,我们使用了self.make、self.model和self.year。在(3)处,我们根据Car类创建了一个实例,并将其存储到变量my_new_car中。接下来,我们调用方法get_descriptive_name(),指出我们拥有的是一辆什么样的汽车:

1561366855320060.png

为让这个类更有趣,下面给它添加一个随时间变化的属性,它存储汽车的总里程。

给属性指定默认值

类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。在有些情况下,如设置默认值时,在方法__init__()内指定这种初始值是可行的;如果你对某个属性这样做了,就无需包含为它提供初始值的形参。

下面来添加一个名为odometer_reading的属性,其初始值总是为0。我们还添加了一个名为read_odometer()的方法,用于读取汽车的里程表:

1561366932445703.png

现在,当Python调用方法__init__()来创建新实例时,将像前一个示例一样以属性的方式存储制造商、型号和生产年份。接下来,Python将创建一个名为odometer_reading的属性,并将其初始值设置为0。在(2)处,我们还定义了一个名为read_odometer()的方法,它让你能够轻松地获悉汽车的里程。

一开始汽车的里程为0:

1561366985457156.png

出售时里程表读数为0的汽车并不多,因此我们需要一个修改该属性的值的途径。

修改属性的值

可以以三种不同的方式修改属性的值:直接通过实例进行修改、通过方法进行设置、通过方法进行递增(增加特定的值)。下面依次介绍这些方法。

1. 直接修改属性的值

要修改属性的值,最简单的方式是通过实例直接访问它。下面的代码直接将里程表读数设置为23:

1561367087444193.png

在(1)处,我们使用句点表示法来直接访问并设置汽车的属性odometer_reading。这行代码让Python在实例my_new_car中找到属性odometer_reading,并将该属性的值设置为23:

1561367123153304.png

有时候需要像这样直接访问属性,但其他时候需要编写对属性进行更新的方法。

2. 通过方法修改属性的值

如果有替你更新属性的方法,将大有裨益。这样,你就无需直接访问属性,而可将值传递给一个方法,由它在内部进行更新。下面的示例演示了一个名为update_odometer()的方法:

1561367180360495.png

对Car类所做的唯一修改是在(1)处添加了方法update_odometer()。这个方法接受一个里程值,并将其存储到self.odometer_reading中。在(2)处,我们调用了update_odometer(),并向它提供了实参23(该实参对应于方法定义中的形参mileage)。它将里程表读数设置为23;而方法read_odometer()打印该读数:

1561367228166854.png

可对方法update_odometer()进行扩展,使其在修改里程表读数时做些额外的工作。下面来添加一些逻辑,禁止任何人将里程表读数往回调:

1561367278675239.png

1561367288111546.png

现在,update_odometer()在修改属性前检查指定的读数是否合理。如果新指定的里程(mileage)大于或等于原来的里程(self.odometer_reading),就将里程表读数改为新指定的里程;否则就发出警告,指出不能将里程表往回拨。

3. 通过方法对属性的值进行递增

有时候需要将属性值递增特定的量,而不是将其设置为全新的值。假设我们购买了一辆二手车,且从购买到登记期间增加了100英里的里程,下面的方法让我们能够传递这个增量,并相应地增加里程表读数:

1561367418432220.png

在(1)处,新增的方法increment_odometer()接受一个单位为英里的数字,并将其加入到self.odometer_reading中。在(2)处,我们创建了一辆二手车——my_used_car。在(3)处,我们调用方法update_odometer()并传入23500,将这辆二手车的里程表读数设置为23500。在(4)处,我们调用increment_odometer()并传入100,以增加从购买到登记期间行驶的100英里:

1561367485350245.png

我们可以轻松地修改这个方法,以禁止增量为负值,从而防止有人利用它来回拨里程表。

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

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

相关文章

iApp最新版无服务器多功能软件库源码

无需服务器的多功能软件库源码分享,仅需添加一个后台应用和一个文档即可 使用教程如下: 在浏览器中打开理想后台地址:http://apps.xiaofei.run/user/ 如果没有账号,请注册一个免费账号。 登录账号后,添加一个后台应…

rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心)

分布式微服务治理的核心在于: 微服务和分布式(微服务框架)微服务的最优技术实现目前是: SpringBoot(RPC 框架)分布式的最优技术实现目前是: Thrift,Motan,Dubbo,Spring Cloud(Netflix OSS),Finagle,gRPCRPC 是什么RPC 的全称是 Remote Procedure Call ,是一种进程间…

2019年度全球工程前沿研究报告

来源:JAS自动化学报英文版1. 工程研究前沿1.1 Top 10 工程研究前沿发展态势信息与电子工程领域 Top 10 工程研究前沿涉及电子科学与技术、光学工程与技术、仪器科学与技术、信息与通信工程、计算机科学与技术、控制科学与技术等学科方向。其中,“面向光互…

python取数字第一位数_python基础:8.切片和缩进

0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负所望。谢谢!!!1.前提基…

python图像_Python图像处理库(PIL)

Python Imaging Library为您的python程序添加图像处理能力。这个库提供广泛的文件格式支持、高效的内部表示和相当强大的图像处理能力。 核心图像库是为快速访问几种基本像素格式图像设计的。它能为一般的图像处理工具提供一个可靠的基础。 这个Pythonic library可以 装载和保存…

怎么开通手机信息服务器,如何用手机建立网站

如何用手机建立网站 内容精选换一换本文以营销版网站配置为例,介绍如何通过云速建站服务快速创建一个网站。云速建站操作简单方便,只需四步,就可以轻松创建一个网站。建站流程开通网站:包括购买营销版站点、购买精美模板(可选)和安…

cmd测试cuda安装_安装:anaconda+cuda+pytorch+pycharm

每次安装都要在网上各种搜索,为了下次安装的时候简单一点,把对我安装帮助较大的链接整理了一下,整个过程仅供参考:除了pycharm,其他位置均不建议更改默认位置,建议全程可开着cmd1、anaconda安装直接下载&am…

AI会完美的执行我们设定的目标,但这不是一个好消息

来源:混沌巡洋舰导读: 科普网站quanta magazine上一篇名为 Artificial Intelligence Will Do What We Ask. That’s a Problem的文,是关于AI与人际交互时,如何满足更好的理解人类需求。该文的核心观点是:通过教机器理解…

浏览器 刷新页面后回到顶部_推荐 3 个实用的 chrome 浏览器扩展

The Great Suspender同时打开太多的网页会极大的消耗电脑系统资源。The Great Suspender 会把长时间不用的网页冻结,从而释放被这些网页占据的内存和 CPU。扩展安装完成后,会自动跳出设置界面。你可以设置「多久后自动冻结标签」,建议选择一个…

华为服务器更换主板后怎么进系统,服务器更换主板

服务器更换主板 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。如果弹性负载均衡实例使用的证书过期或者其它原因需要更换&#xf…

圆弧半径计算图解_刀尖圆弧半径补偿G40,G41,G42 左补偿右补偿你真的能搞清楚吗...

当编写数控轨迹代码时, 一般是以刀具中心为基准。 但实际中, 刀具通常是 圆形的,刀具中心并不是刀具与加工零件接触的部分, 所以刀具中心的的轨迹应 偏离实际零件轨迹一个刀具半径的距离。 简单的将零件外形的轨迹偏移一个刀具 半…

python tensorflow多个输入_十分钟带你入门最新Python的AI库TensorFlow 2.0

去年11月,TensorFlow庆祝了它的第三个生日。多年来,它成为最受欢迎的ML 框架之一,并拥有了大量的粉丝。TensorFlow庆祝了它的第三个生日谷歌将这个框架融入Java,C ,JavaScript,最重要的是融入主要的数据科学…

人脑为何能够快速学习新知识? 用AI的视角来分析

来源:混沌巡洋舰相比机器,人脑擅长快速的跨任务学习和泛化推理, 或者说叫做卓越的元学习能力。我们说人类站立在这个迅速变化的危险世界面前,快速适应新任务的元学习能力事关生死。这种能力是目前的深度学习人工智能所完全不具备的…

lwip协议栈实现服务器端主动发送,lwip协议栈源码详解说明 - 全文

1、LWIP的结构lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。LWIP(Light weight internet protocol)的主要模块包括:配置模块、初始化模块、Nef模块、mem(memp)模块、…

中希尔排序例题代码_超全面分析十大排序算法

点击上方“零一视界”,选择“星标”公众号资源干货,第一时间送达作者 | 不该相遇在秋天责编 | 程序员小吴前言本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程。预计阅读时间 47 分钟,强…

eslint规范_代码规范化之Vue篇

写在前面代码规范化的重要性不在这里展开了。这一篇讲了Vue项目下如何做代码规范化的事情,主要涉及了eslint、prettier、huskylint-staged、onchange、editorConfig这几个角色。另外,虽然配置限于Vue项目,但整个思路也可以作为其他项目代码规…

人类为什么不会被人工智能取代?

来源:人机与认知实验室〔摘要〕文章旨在对人工智能的技术本质进行分析,以回应为什么人类不会被人工智能取代的问题。通过历史分析的方法,以“器官投影说”等技术哲学思想作为分析工具,回顾了人工智能技术的历程。发现在理论上&…

工作组服务器操作系统,工作组服务器操作系统

工作组服务器操作系统 内容精选换一换弹性云服务器操作系统无法正常启动时,或云服务器系统运行正常,但需要对系统进行优化,使其在最优状态下工作时,用户可以使用重装弹性云服务器的操作系统功能。重装操作系统后弹性云服务器IP地址…

270 扩展固态硬盘_游戏人的扩展坞应该是怎样?

为何现在越来越多的游戏爱好者开始使用游戏扩展坞?原因其实很简单,如今游戏笔记本也慢慢往轻薄本发展,拓展坞的加入可让笔记本实现台式机的玩机体验,通过扩展坞可以实现现在许多游戏本不具备的功能,比如外接超高清显示…

几十亿打水漂!世界最大移动通信展MWC因疫情33年来首次取消,多方损失惨重...

资料来源:新智元、AI前线物联网智库 整理发布转载请注明来源和出处北京时间2月13日早晨(今晨),世界移动通讯展(MWC)主办方GSMA正式宣布取消原定于本月24日至27日在西班牙巴塞罗那举办的MWC2020展会。这也是…