Python学习笔记14:进阶篇(三)。类的终结篇,类的导入和模块的导入。

前言

这篇文章属于类知识的最后一篇,带一点点其他知识,学习内容来自于Python crash course。
关注我私信发送Python crash course,分享一份中文版PDF。

类的导入

在学习的时候,包括之前,我都是在一个文件中把所有代码都写上去,包括定义不同的类,定义函数,实例化类等等都写一起。
实际上,将过多的代码堆积在一个类上,是非常不友好的编程习惯。我们应该合理的整理归纳我们定义的类以及实现功能的代码,方便维护方便使用。
当类文件都不是同一个的时候,我们怎么使用别的文件的类呢?答案是使用导入。之前学习库的知识的时候了解到,我们可以导入别人的库来实现自己功能。那么类,是不是同样也可以导入。
很显然,可以。

模块

什么是模块

模块是组织Python代码的方式之一,它是一种将相关的函数、类和变量等封装在一个文件中的结构。模块文件以.py作为扩展名。
简单理解一下,你创建一个.py文件,这就是一个模块。
在这里插入图片描述
这里有两个py文件,相当于两个模块。当然这个模块命名不是很好,只是学习用没有很正式的命名。这两个模块实际上就是昨天的一个类的继承和类的组合的两个模块。

模块的好处

  1. 代码重用:编写一次功能,可以在多个地方通过导入模块来使用,避免重复编写相同的代码。
  2. 提高可维护性:将功能分解到不同的模块中,使得代码结构更清晰,便于管理和维护。
  3. 命名空间管理:每个模块都有自己的命名空间,可以减少全局变量冲突的问题。
  4. 模块化编程:有助于实现复杂系统的分层设计,每个模块负责一部分功能,易于理解和调试。

类的编码风格

导入类的时候,由于库,模块,类可能是同一个英文单词,所以编码的风格规范能够更好的帮助你导入类的语法。这里贴上学习数据中关于编码风格的内容。

类名应采用驼峰命名法 驼 ,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文
档字符串,对其中的类可用于做什么进行描述。
可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。
需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import
语句,再添加一个空行,然后编写导入你自己编写的模块的import 语句。在包含多 条import
语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。

编写代码

继续采用car的例子。这次稍微发散一点。现在有一个汽车工厂生产汽车,流水线组装汽车。很明显我们不能把流水线的类和汽车零件的类放到一起。因为我们现在不是初学者,必须学会模块化开发,这两放一个模块明显就不合理。当然,你可以把流水线和汽车的零件这些模块组合成一个汽车库,内部实现组装汽车的功能,然后让别人使用这个库去组装汽车。
这里我们简单的讲在流水线模块调用其他零件模块组装汽车,简单粗暴就一个引擎哈。实现一个优秀的汽车工厂功能,需要用到几种设计模式。Python的设计模式写出来我估计得花挺多时间还要查资料啥的,而且这里重点讲的类的导入,所以就简单意思一下。

首先编写一个Engine模块

  1. 我是先编写完了代码,再开始写文章的,文章实际上我的思路和编写过程。
  2. 这里用的是一个Engine的父类,然后简单写了两个类继承,一个是Electric Engine,一个是Internal Combustion Engine。内容也很简单哈,大家自己写的时候尽量用上之前学的东西,将知识连贯起来。
    在这里插入图片描述

编写一个汽车工厂的模块

  1. 工厂模块编写的也很简单哈,就一个名字,一个模拟函数,实际是打印输出。
  2. 注意看函数的第二个参数和我的输出,先记一下,待会将为什么。
    在这里插入图片描述

编写一个实现的模块

我创建了一个自己的工厂,刚建出来pychram就说建不了,pychram问我你哪里厂你就建。

在这里插入图片描述
这就是我们之前说的情况,我用的类都在其他模块,我怎么才能用上呢?有好几个办法,我们一个个讲。

  1. 导入单个类
    语法: from module_name import class_name
    介绍:来自于某某模块导入某某类。大概就这个释义哈。
    在这里插入图片描述

  2. 导入多个类
    语法: from module_name import class_name_1,class_name_2...
    和单个类的语法类似,用逗号隔开多个即可。
    在这里插入图片描述
    敲重点!!!
    注意看car_factory中的create_car函数,参数明明是engine,为什么这里我使用了两个不是Engine的类,也可以?

    回答:多态。简单的理解就是多种形态。多态的含义大家往前看能看到,我这边不写出来,大家自己看的加深印象。

    多态允许程序中的对象对同一消息作出不同响应,具体响应取决于接收消息的对象的类型。

    在代码中的ElectricEngine和InternalCombustionEngine两个类都是Engine类的子类,而我们在函数中传递的就是Engine。

    ElectricEngine和InternalCombustionEngine这两个是Engine吗?是,是特殊的Engine。

    那是Engine是不是就可以作为create_car函数的参数进行传递了!那么根据Engine在当前函数的状态,就创建出了不同引擎的汽车。

    大家好好理解一下,可以查其他资料,也可以自己写其他例子验证。

  3. 导入所有类
    语法: from module_name import *
    这里的*我个人理解是通配符,表示所有。就想MySQL里面的select *
    在这里插入图片描述
    大家可以看到,我换成*后,还创建出一个普通的Engine汽车。

  4. 导入整个模块
    语法: import module_name
    import后直接就是模块名了,就像之前我们导入库一下。
    在这里插入图片描述
    注意如果我们直接导入模块,那么我们不能直接使用类名创建,而是需要使用模块名.类型的方式指定类。

结尾

这篇文章主要讲Python中类的导入,模块的知识,导入类的多种方式,这篇要学透,因为实际写项目的时候,用的很多,导入自己的类和模块,导入标准库的类和模块,导入第三方库的类的和模块。通过导入现有的库完成项目,能节省很多功夫。
今天的内容就到这里,后面学习文件的操作。

点赞收藏关注不迷路,加油!

作业

  1. 根据自己前一天定义的类,分模块化编写,参考本文利用自己编写的模块实现某些功能。
  2. 直接导入模块后,为什么要使用模块名.类名方法?

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

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

相关文章

免费域名第二弹:手把手教你获取个性化免费域名并托管至Cloudflare

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 免费申请域名的方法 📒📝 注册账号📝 创建免费域名📝 将域名添加到 Cloudflare⚓️ 相关链接 ⚓️📖 介绍 📖 在如今的数字时代,拥有一个个性化的域名已经成为越来越多人的需求。无论是建立个人博客、项目展示,还…

鸿蒙开发通信与连接:【@ohos.connectedTag (有源标签)】

有源标签 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import connectedTag from ohos.connectedTag;connectedTag.init init(): boolean 初始化有源标签芯片。 需要权限&#…

MySQL经典面试题:谈一谈你对事务的理解

文章目录 📑事务事务的基本概念回滚开启事务的sql语句 事务的基本特性总结一下涉及到的三个问题 ☁️结语 📑事务 事务的基本概念 事务是用来解决一类特定场景的问题的,在有些场景中,完成某个操作,需要多个sql配合完…

CPN IDE实现分层效果

Shift键鼠标选中要分层的库所和变迁!然后create subpage。 Subpage是这样的,不会像CPN tools里面自动生成IN和OUT库所,但是也能正确运行。 虽然父页面在运行中有标红:"port not defined" 错误通常意味着在模型中有一些连…

【QT5】<重点> QT多线程

文章目录 前言 一、QThread创建多线程 二、QMutex基于互斥量的同步 三、QReadWriteLock线程同步 四、QWaitCondition线程同步 五、QSemaphore基于信号量的同步 前言 本篇记录学习QT多线程的知识,参考视频13.1QThread创建多线程程序_哔哩哔哩。若涉及版权问题…

单元测试很难么?

前言 你可能会用单元测试框架,python的unittest、pytest,Java的Junit、testNG等。 那么你会做单元测试么!当然了,这有什么难的? test_demo.py def inc(x): return x 1 def test_answer(): assert inc(3) 4 i…

经验分享,CRC(循环冗余校验)在线计算

这里分享一个好用的在线计算CRC的网站。 网址:http://www.ip33.com/crc.html 截图:

Ubuntu22.04系统安装及配置

文章目录 一、选择“安装” 二、选择“语言” 三、安装器更新 四、键盘布局 五、选择安装类型 六、网络配置 七、代理设置 八、镜像地址 九、磁盘划分 十、设置用户名、主机名、登录密码 十一、升级到Ubuntu Pro 十二、SSH设置 十三、选装软件包 十四、开始安装进…

灰度图像直方图均衡化

文章目录 1.实验目的2.需求3.代码4.实验结果 1.实验目的 了解一种最基本的图像增强技术,本质上是对灰度图像进行灰度变换。 2.需求 对给定图像进行灰度直方图展示,然后均衡化后再次展示 3.代码 import cv2 as cv import numpy as np from matplotli…

类注释规范

类注释规范 1.1.1 模板配置 模板路径:File–>settings–>Editor–>File and Code Templates–>Includes–>File Header  N A M E :设置类名,与下面的 {NAME}:设置类名,与下面的 NAME:设…

【TB作品】MSP430G2553,单片机,口袋板, 多路温度巡回检测仪的设计

题7 多路温度巡回检测仪的设计 设计一个多路温度检测仪,共有8个测温点,每个点连续检测8次,以平均值代表该点温度,并轮流在LED显示器上显示。测试检测元件为铂热电阻Pt1000, 温度测量范围为100℃ ——500℃,测量精度为1…

Pointnet++改进即插即用系列:全网首发HeatBlock高计算效率和全局接受野|即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入HeatBlock,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.…

Jlink下载固件到RAM区

Jlink下载固件到RAM区 准备批处理搜索exe批处理调用jlink批处理准备jlink脚本 调用执行 环境:J-Flash V7.96g 平台:arm cortex-m3 准备批处理 搜索exe批处理 find_file.bat echo off:: 自动识别脚本名和路径 set "SCRIPT_DIR%~dp0" set &qu…

【0008day】Shiny的介绍

介绍&#xff1a;Shiny 是一个开源 R 包&#xff0c;它提供了一个优雅而强大的 Web 框架&#xff0c;用于使用 R 构建 Web 应用程序。Shiny 可以帮助您将分析转变为交互式 Web 应用程序&#xff0c;而无需 HTML、CSS 或 JavaScript 知识。 # download R package pkgtest <-…

计算机体系结构期末复习(一二章)

计算机体系结构期末复习&#xff08;一二章&#xff09; 由于内容比较多&#xff0c;分为两次发出 注意&#xff1a;可能有部分考点遗漏&#xff0c;可能有部分例题没有匹配正确的知识点或被遗漏&#xff0c;欢迎各位补充 第一章 1. 计算机系统的层次性 知识点&#xff1a…

实验室自用LabVIEW软件与商用软件价格差异分析

实验室自用LabVIEW软件与商用软件在价格上的差异源于功能与扩展包、技术支持与服务、使用场景与合规性、更新与维护、市场与定价策略、培训与教育资源及许可证管理与合规审计等方面的不同。商用软件提供更全面的功能和支持&#xff0c;确保高可靠性和合规性&#xff0c;因此价格…

奥特曼谈AI的机遇、挑战与人类自我反思:中国将拥有独特的大语言模型

奥特曼在对话中特别提到&#xff0c;中国将在这个领域扮演重要角色&#xff0c;孕育出具有本土特色的大语言模型。这一预见不仅彰显了中国在全球人工智能领域中日益增长的影响力&#xff0c;也预示着未来技术发展的多元化趋势。 ①奥特曼认为AI在提升生产力方面已显现积极作用&…

APP自动化测试-Appium常见操作之详讲

一、基本操作 1、点击操作 示例&#xff1a;element.click() 针对元素进行点击操作 2、初始化&#xff1a;输入中文的处理 说明&#xff1a;如果连接的是虚拟机&#xff08;真机无需加这两个参数&#xff0c;加上可能会影响手工输入&#xff09;&#xff0c;在初始化配置中…

JupyterLab使用指南(六):JupyterLab的 Widget 控件

1. 什么是 Widget 控件 JupyterLab 中的 Widget 控件是一种交互式的小部件&#xff0c;可以用于创建动态的、响应用户输入的界面。通过使用 ipywidgets 库&#xff0c;用户可以在 Jupyter notebook 中创建滑块、按钮、文本框、选择器等控件&#xff0c;从而实现数据的交互式展…

多态性(Java)

本篇学习面向对象语言的第三个特性——多态。 目录 1、多态的概念 2、继承多态实现条件 3、重写 4、重新与重载的区别&#xff1a; 5、向上转移和向下转型 5、1向上转型&#xff1a; 5、2 向下转型 1、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态…