关于“Python”的核心知识点整理大全22

目录

​编辑

9.4.2 在一个模块中存储多个类

虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的 类。类Battery和ElectricCar都可帮助模拟汽车,因此下面将它们都加入模块car.py中: car.py

my_electric_car.py

9.4.3 从一个模块中导入多个类

9.4.4 导入整个模块

my_cars.py

在1处,我们导入了整个car模块。接下来,我们使用语法module_name.class_name访问需要 的类。像前面一样,我们在2处创建了一辆大众甲壳虫汽车,并在3处创建了一辆特斯拉Roadster 汽车。

9.4.5 导入模块中的所有类

9.4.6 在一个模块中导入另一个模块

electric_car.py

car.py

my_cars.py

9.4.7 自定义工作流程

9.5 Python 标准库

favorite_languages.py

9.6 类编码风格

9.7 小结

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


9.4.2 在一个模块中存储多个类

虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的 类。类Battery和ElectricCar都可帮助模拟汽车,因此下面将它们都加入模块car.py中: car.py
"""一组用于表示燃油汽车和电动汽车的类"""
class Car():--snip--
class Battery():"""一次模拟电动汽车电瓶的简单尝试"""def __init__(self, battery_size=60):"""初始化电瓶的属性"""self.battery_size = battery_sizedef describe_battery(self):"""打印一条描述电瓶容量的消息"""print("This car has a " + str(self.battery_size) + "-kWh battery.")def get_range(self):"""打印一条描述电瓶续航里程的消息"""if self.battery_size == 70:range = 240elif self.battery_size == 85:range = 270message = "This car can go approximately " + str(range)message += " miles on a full charge."print(message)
class ElectricCar(Car):"""模拟电动汽车的独特之处"""def __init__(self, make, model, year):"""
初始化父类的属性,再初始化电动汽车特有的属性"""super().__init__(make, model, year)self.battery = Battery() 

现在,可以新建一个名为my_electric_car.py的文件,导入ElectricCar类,并创建一辆电动汽 车了:

my_electric_car.py
from car import ElectricCar
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range() 

输出与我们前面看到的相同,但大部分逻辑都隐藏在一个模块中:

2016 Tesla Model S
This car has a 70-kWh battery.
This car can go approximately 240 miles on a full charge. 

9.4.3 从一个模块中导入多个类

可根据需要在程序文件中导入任意数量的类。如果我们要在同一个程序中创建普通汽车和电 动汽车,就需要将Car和ElectricCar类都导入:

my_cars.py

1 from car import Car, ElectricCar
2 my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
3 my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name()) 

在1处从一个模块中导入多个类时,用逗号分隔了各个类。导入必要的类后,就可根据需要 创建每个类的任意数量的实例。

在这个示例中,我们在2处创建了一辆大众甲壳虫普通汽车,并在3处创建了一辆特斯拉 Roadster电动汽车:

2016 Volkswagen Beetle
2016 Tesla Roadster

9.4.4 导入整个模块

你还可以导入整个模块,再使用句点表示法访问需要的类。这种导入方法很简单,代码也易 于阅读。由于创建类实例的代码都包含模块名,因此不会与当前文件使用的任何名称发生冲突。 下面的代码导入整个car模块,并创建一辆普通汽车和一辆电动汽车:

my_cars.py
1 import car
2 my_beetle = car.Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
3 my_tesla = car.ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
在1处,我们导入了整个car模块。接下来,我们使用语法module_name.class_name访问需要 的类。像前面一样,我们在2处创建了一辆大众甲壳虫汽车,并在3处创建了一辆特斯拉Roadster 汽车。

9.4.5 导入模块中的所有类

要导入模块中的每个类,可使用下面的语法:

from module_name import 

不推荐使用这种导入方式,其原因有二。首先,如果只要看一下文件开头的import语句,就 能清楚地知道程序使用了哪些类,将大有裨益;但这种导入方式没有明确地指出你使用了模块中 的哪些类。这种导入方式还可能引发名称方面的困惑。如果你不小心导入了一个与程序文件中其 他东西同名的类,将引发难以诊断的错误。这里之所以介绍这种导入方式,是因为虽然不推荐使 用这种方式,但你可能会在别人编写的代码中见到它。

需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.class_name语法 来访问类。这样做时,虽然文件开头并没有列出用到的所有类,但你清楚地知道在程序的哪些地 方使用了导入的模块;你还避免了导入模块中的每个类可能引发的名称冲突。

9.4.6 在一个模块中导入另一个模块

有时候,需要将类分散到多个模块中,以免模块太大,或在同一个模块中存储不相关的类。 将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。在这种情况 下,可在前一个模块中导入必要的类。 例如,下面将Car类存储在一个模块中,并将ElectricCar和Battery类存储在另一个模块中。 我们将第二个模块命名为electric_car.py(这将覆盖前面创建的文件electric_car.py),并将Battery和ElectricCar类复制到这个模块中:

electric_car.py
"""一组可用于表示电动汽车的类"""
1 from car import Car
class Battery():--snip--
class ElectricCar(Car):--snip-- 

ElectricCar类需要访问其父类Car,因此在1处,我们直接将Car类导入该模块中。如果我们 忘记了这行代码,Python将在我们试图创建ElectricCar实例时引发错误。我们还需要更新模块 car,使其包含Car类:

car.py
"""一个可用于表示汽车的类"""
class Car():--snip-- 

现在可以分别从每个模块中导入类,以根据需要创建任何类型的汽车了:

my_cars.py
1 from car import Car
from electric_car import ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())

在1处,我们从模块car中导入了Car类,并从模块electric_car中导入ElectricCar类。接下 来,我们创建了一辆普通汽车和一辆电动汽车。这两种汽车都得以正确地创建:

2016 Volkswagen Beetle
2016 Tesla Roadster 

9.4.7 自定义工作流程

正如你看到的,在组织大型项目的代码方面,Python提供了很多选项。熟悉所有这些选项很 重要,这样你才能确定哪种项目组织方式是最佳的,并能理解别人开发的项目。 一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始时就尝 试将类存储到模块中。先找出让你能够编写出可行代码的方式,再尝试让代码更为组织有序。

9.5 Python 标准库

Python标准库是一组模块,安装的Python都包含它。你现在对类的工作原理已有大致的了解, 可以开始使用其他程序员编写好的模块了。可使用标准库中的任何函数和类,为此只需在程序开 头包含一条简单的import语句。下面来看模块collections中的一个类——OrderedDict。 字典让你能够将信息关联起来,但它们不记录你添加键—值对的顺序。要创建字典并记录其 中的键—值对的添加顺序,可使用模块collections中的OrderedDict类。OrderedDict实例的行为 几乎与字典相同,区别只在于记录了键—值对的添加顺序。 我们再来看一看第6章的favorite_languages.py示例,但这次将记录被调查者参与调查的 顺序:

favorite_languages.py
1 from collections import OrderedDict
2 favorite_languages = OrderedDict()
3 favorite_languages['jen'] = 'python'
favorite_languages['sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python'
4 for name, language in favorite_languages.items():print(name.title() + "'s favorite language is " +language.title() + ".") 

我们首先从模块collections中导入了OrderedDict类(见1)。在2处,我们创建了OrderedDict 类的一个实例,并将其存储到favorite_languages中。请注意,这里没有使用花括号,而是调用 OrderedDict()来创建一个空的有序字典,并将其存储在favorite_languages中。接下来,我们以 每次一对的方式添加名字—语言对(见3)。在4处,我们遍历favorite_languages,但知道将以 添加的顺序获取调查结果:

Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python. 

这是一个很不错的类,它兼具列表和字典的主要优点(在将信息关联起来的同时保留原来的 顺序)。等你开始对关心的现实情形建模时,可能会发现有序字典正好能够满足需求。随着你对 标准库的了解越来越深入,将熟悉大量可帮助你处理常见情形的模块。


注意 你还可以从其他地方下载外部模块。本书第二部分的每个项目都需要使用外部模块,届 时你将看到很多这样的示例。


9.6 类编码风格

你必须熟悉有些与类相关的编码风格问题,在你编写的程序较复杂时尤其如此。

类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名 和模块名都采用小写格式,并在单词之间加上下划线。

对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的 功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文档字符串, 对其中的类可用于做什么进行描述。

可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中, 可使用两个空行来分隔类。

需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再 添加一个空行,然后编写导入你自己编写的模块的import语句。在包含多条import语句的程序中, 这种做法让人更容易明白程序使用的各个模块都来自何方。

9.7 小结

在本章中,你学习了:如何编写类;如何使用属性在类中存储信息,以及如何编写方法,以 让类具备所需的行为;如何编写方法__init__(),以便根据类创建包含所需属性的实例。你见识 了如何修改实例的属性——包括直接修改以及通过方法进行修改。你还了解了:使用继承可简化 相关类的创建工作;将一个类的实例用作另一个类的属性可让类更简洁。 你了解到,通过将类存储在模块中,并在需要使用这些类的文件中导入它们,可让项目组织 有序。你学习了Python标准库,并见识了一个使用模块collections中的OrderedDict类的示例。 最后,你学习了编写类时应遵循的Python约定。 在第10章中,你将学习如何使用文件,这让你能够保存你在程序中所做的工作,以及你让用户 做的工作。你还将学习异常,这是一种特殊的Python类,用于帮助你在发生错误时采取相应的措施


关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

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

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

相关文章

基于 Gin 的 HTTP 代理上网行为记录 demo

前言: 前端时间写了好几篇使用 Gin 框架来做 HTTP 代理 demo 的文章,然后就想着做一个记录上网行为的小工具,就是简单记录看看平时访问了什么网站(基于隧道代理的,不是中间人代理,所以只能记录去了哪里,不能…

wps左上角有绿色小三角的数字如何求和

1.这个状态是求和不了的,使用求和公式求出来的也是0 2.进行如下操作 3.转换好后 则可以求和成功了

深度学习 Day16——P5运动鞋识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…

【Qt QML 入门】TextArea

TextArea也是一个多行文本编辑器。TextArea相比texttedit,增加了占位符文本,并添加了样式定义。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextArea {id: taanchors.centerIn: …

解决Visual Studio 各版本都出现新建项目后解决方案下没有文件和项目问题

一步一步创建C#控制台应用程序也会出错,这个你可能不会相信,我就遇到了这么一次,就在刚刚,是的,我都不敢相信,用了这么多年的新建一个控制台程序居然不正常了。新建完毕发现里面什么都没有,除了…

首发卡密引流系统源码

程序特色: 支持个人和企业小程序广告获取卡密。 支持短视频点赞和关注获取卡密。 搭建教程: 环境要求:Nginx、MySQL 5.6、PHP 5.6 步骤: 将压缩包解压至网站根目录。 打开域名/install,按照提示填写数据库信息进行…

JS对象循环引用的危害:你知道吗?

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

移动端机器学习框架 MDL 简介与实践

Mobile-deep-learning(MDL) MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架,可以应用在图像识别领域。 具体应用:在手机百度 App 中,用户只需要点击自动拍开关,将手机对准物体&…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段,接下来会逐渐进入到AI On阶段。”12月16日,英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴,联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…

大模型Transformer 推理 :kvCache原理浅析

大模型Transformer 推理 :kvCache原理浅析 kvCache 原理 在采样时,Transformer模型会以给定的提示/上下文作为初始输入进行推理(可以并行处理),然后逐一生成额外的标记来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为…

27系列DGUS智能屏发布:可实时播放高清模拟信号摄像头视频

针对高清晰度的模拟信号摄像头视频画面的显示需求,迪文特推出27系列DGUS智能屏。该系列智能屏可适配常见的AHD摄像头、CVBS摄像头,支持单路1080P高清显示、两路720P同屏显示(同一类型摄像头)。用户通过DGUS简单开发即可实现摄像头…

【送书活动】智能汽车、自动驾驶、车联网的发展趋势和关键技术

文章目录 前言01 《智能汽车》推荐语 02 《SoC底层软件低功耗系统设计与实现》推荐语 03 《SoC设计指南》推荐语 05 《智能汽车网络安全权威指南(上册)》推荐语 06 《智能汽车网络安全权威指南(下册)》推荐语 后记赠书活动 前言 …

mac安装pnpm与使用

1、什么是pnpm? pnpm 全称 performant npm,意思是高性能的 npm。pnpm 由 npm/yarn 衍生而来,解决了 npm/yarn 内部潜在的 bug,极大的优化了性能,扩展了使用场景。被誉为 “最先进的包管理工具”。 2、pnpm特点 速度…

虚拟机启动 I/O error in “xfs_read_agi+0x95“

1.在选择系统界面按e 进入维护模式 2.找到ro把ro改成 rw init/sysroot/bin/sh 然后按Ctrlx 3.找到坏掉的分区,以nvme0n1p3为例进行修复 xfs_repair -d /dev/nvme0n1p3 4.init 6 重新启动 以下情况 先umount 再修复 则修复成功

接口测试 — 4.Requests库GET、Post请求

Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求。 (不带参数的GET请求请看上一篇文章的练习) 1、Requests库待参数的GET请求 使用Get方法带参数请求时,是params参数字典,而不是data参数字典。data参数字典…

dcoker-compose一键部署EFAK —— 筑梦之路

简介 EFAK(Eagle For Apache Kafka,以前称为 Kafka Eagle)是一款由国内公司开源的Kafka集群监控系统,可以用来监视kafka集群的broker状态、Topic信息、IO、内存、consumer线程、偏移量等信息,并进行可视化图表展示。独…

Arduino中以太网Udp通信

目录 1、测试硬件 2、程序 (0)头文件添加 (1)变量定义 (2)初始化程序 (3)循环执行程序 3、程序下载 (1)开发板控制器和端口号选择 (2&am…

pycharm某个xxx.sh文件显示问号,无法编辑

文章目录 pycharm某个xxx.sh文件显示问号,无法编辑其他参考 pycharm某个xxx.sh文件显示问号,无法编辑 问题描述:pycharm某个xxx.sh文件显示问号,无法编辑 问题分析: pycharm无法识别文件类型。 问题解决: 在pycharm中选中该文件&#xff0…

BugKu-Web-滑稽

题目环境 持续的动态图片 F12审查元素 拿下flag:flag{595d994a34342417bfc3a3c3a23e0a48}

synchronized关键字的使用和原理

synchronized关键字的使用和原理 synchronized:对象锁,保证了临界区内代码的原子性,采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其它线程获取这个对象锁时会阻塞,保证拥有锁的线程可以安全的执行临界区内…