【Python基础】S01E10 类(下)

S01E10 类(下)

  • 引言
  • 导入单个类
  • 导入一个模块中的多个类
  • 从一个模块中导入多个类
  • 导入整个模块
  • 更多引入格式建议
    • 不建议的引入格式
    • 创建别名
    • 类的“大驼峰”式命名法

引言

本博文主要内容将围绕 Python 如何将类存储在模块中,然后在主程序中导入所需的模块,在主程序中调用模块中的类从而构建实例。

有关类的基本概念与引入,请看博文:【Python基础】S01E08 类(上)
有关类的继承,父类与子类,请看博文:【Python基础】S01E09 类(中)


导入单个类

在本部分我们将构建两个 .py 文件,一个为存储类的模块 car.py;另一个为主函数 my_car.py

car.py

class Car():def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):long_name = f"{self.year} {self.make} {self.model}"return long_namedef read_odometer(self):print(f"This car has {self.odometer_reading} miles on it.")def update_odometer(self, mileage):if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer.")def increment_odometer(self, miles):self.odometer_reading += miles

my_car.py

from car import Carmy_new_car = Car('Audi', 'a4', 2024)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

my_car.py 中,我们使用 import 语句让 Python 打开模块 car(car.py)并导入其中的 Car 类。这样,我们就可以使用 Car 类。

导入类是一种高效的编程方式。如果一个程序既包含类的构造部分,又包含使用类的部分,代码会非常长。我们通过将类的构造部分移动到一个模块中并导入该模块,依然可以使用属性与行为。


导入一个模块中的多个类

在本部分我们构建两个函数,一个为存储多个类的模块 car.py,另一个为主函数 my_car.py

class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):long_name = f"{self.year} {self.make} {self.model}"return long_namedef read_odometer(self):print(f"This car has {self.odometer_reading} miles on it.")def update_odometer(self, mileage):if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer.")def increment_odometer(self, miles):self.odometer_reading += milesclass Battery:def __init__(self, battery_size=40):self.battery_size = battery_sizedef describe_battery(self):print(f"This car has a {self.battery_size}-KWh battery.")def get_range(self):if self.battery_size == 40:range = 150elif self.battery_size == 65:range = 225print(f"This car can go about {range} miles on a full charge.")class ElectricCar(Car):def __init__(self, make, model, year):super().__init__(make, model, year)self.battery = Battery()

my_car.py

from car import ElectricCarmu_leaf = ElectricCar('nissian','leaf',2024)
print(mu_leaf.get_descriptive_name())
mu_leaf.battery.describe_battery()
mu_leaf.battery.get_range()>>> 2024 nissian leaf
This car has a 40-KWh battery.
This car can go about 150 miles on a full charge.

上述案例我们通过类 ElectricCar 创建了一个实例 nissian。


从一个模块中导入多个类

这次,我们将从一个包含多个类的模块中使用多个类。
我们希望创建两个车的实例,一个是电动车,一个是汽车。

car.py 代码同上;
my_car.py

from car import Car, ElectricCarmy_mustang = Car('Ford','mustang', 2024)
print(my_mustang.get_descriptive_name())
my_volvo = ElectricCar('Volvo','Ex90',2024)
print(my_volvo.get_descriptive_name())>>> 2024 Ford mustang
2024 Volvo Ex90

上述的代码中,我们从一个模块中导入多个类,用逗号分隔开类名。当导入后,我们根据需要,创建了燃油汽车类(Car)实例(Ford mustang)和电动汽车类(ElectricCar)实例(Volvo Ex90)。


导入整个模块

此外,我们还可以通过导入整个模块的方法。当我们将整个模块(car)导入后,使用点号访问需要的类。而在导入很多模块时,又因为创建类的实例的代码都包含模块名,所以不会因为类的名冲突而影响整个程序。

导入整个模块法

import carmy_mustang = car.Car('Ford','mustang', 2024)
my_volvo = car.ElectricCar('Volvo','Ex90',2024)

同:从一个模块中导入多个类

from car import Car, ElectricCarmy_mustang = Car('Ford','mustang', 2024)
my_volvo = ElectricCar('Volvo','Ex90',2024)

导入整个模块法,我们首先导入整个 car 模块。然后使用语法 module_name.classname 访问需要的类。


更多引入格式建议

不建议的引入格式

不推荐的导入方式;

from module_name import *

使用上述引入格式虽然可以引入类,但是读者应该在引入时清楚程序用了哪些类。其次,这样引入,如果需要引入很多类,类名相同会导致引发问题。


创建别名

当我们要引入的类非常繁琐,或者极长时,哦我们应该使用别名缩短长度;

e . g . e.g. e.g.

from electric_car import ElectricCar as EC
my_volvo = EC('Volvo','Ex90',2024)

类的“大驼峰”式命名法

  • 类名应采用大驼峰式命名法,即将类名中的每个单词的首字母都大写,并且不适用下划线。
  • 实例名和模块名应采用全部小写格式,并在单词之间加上下划线。
  • 而对于每个类,都应该在类定义后面紧跟一个文档字符串。文档字符串将简要的描述类的功能。
  • 我们还可以使用空行来组织代码,但是不宜过多。在类中,可以使用一个空行来分隔方法;而在模块中,可以使用两个空行来分隔类。
  • 当需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的 import 语句,再添加一个空行,然后编写导入你自己编写的模块的 import 语句。在包含多条 import 语句的程序中,这种做法更容易明白程序使用的各个模块来自于哪里。

徐鸿铎
2023.9.27
海淀 北京 中国

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)

文章目录 一、演示多分类效果二、PaddleClas介绍三、代码获取四、数据集获取五、环境搭建六、数据格式分析七、模型训练7.1 模型恢复训练7.2 多卡训练7.3 其他训练指标 八、模型预测九、模型评估十、PaddleClas相关博客 一、演示多分类效果 二、PaddleClas介绍 PaddleClas主要…

PY32F003F18之RTC

一、RTC振荡器 PY32F003F18实时时钟的振荡器是内部RC振荡器,频率为32.768KHz。它也可以使用HSE时钟,不建议使用。HAL库提到LSE振荡器,但PY32F003F18实际上没有这个振荡器。 缺点:CPU掉电后,需要重新配置RTC&#xff…

【深度学习】图像去噪(2)——常见网络学习

【深度学习】图像去噪 是在 【深度学习】计算机视觉 系列文章的基础上,再次针对深度学习(尤其是图像去噪方面)的基础知识有更深入学习和巩固。 1 DnCNN 1.1 网络结构 1.1.1 残差学习 1.1.2 Batch Normalization (BN) 1.1.2.1 背景和目标…

java项目之人事管理系统(ssm源码+文档)

项目简介 人事管理系统实现了以下功能: 管理员:个人中心、员工管理、部门经理管理、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理、部门类型管理.部门经理:个人中心、员工管理、部门信息管理、员工考勤管理、签到管理…

Baichuan2 技术报告笔记

文章目录 预训练预训练数据模型架构TokenizerPositional EmbeddingsAcitivations and NormalizationsOptimizations 对齐Supervised Fine-TuningRLHF 安全性预训练阶段对齐阶段 参考资料 对Baichuan2技术报告阅读后的笔记 Baichuan2 与其他大模型的对比如下表 预训练 预训练数…

【Linux】C语言实现对文件的加密算法

异或加密 解密方式是进行第二次加密后自动解密 #define BUF_SIZE (16384) //16k /************************************************************** 功能描述: 加密实现 输入参数: --------------------------------------------------------------- 修改作者: 修改日期…

山西电力市场日前价格预测【2023-09-27】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-27)山西电力市场全天平均日前电价为342.48元/MWh。其中,最高日前电价为454.24元/MWh,预计出现在18: 30。最低日前电价为171.32元/MWh,预计…

如何永久关闭WPS任务窗口?

1、按住任务窗口上的浮动按钮,将其拖出来成悬浮窗口。 第二步,使用火绒弹窗拦截,选中弹出的窗口,进行拦截。注意:拦截次数为2次。即进行2次操作。 操作两次后,弹窗被拦截,此时Word文档改为双页显…

蓝桥杯每日一题20223.9.26

4407. 扫雷 - AcWing题库 题目描述 分析 此题目使用map等都会超时,所以我们可以巧妙的使用哈希模拟散列表,哈希表初始化为-1首先将地雷读入哈希表,找到地雷的坐标在哈希表中对应的下标,如果没有则此地雷的位置第一次出现&#…

QQ怎么上传大于1G的视频啊?视频压缩这样做

当我们想要在QQ上分享一段大容量的视频时,往往会因为超过1G的限制而感到无助。不过,不用担心,今天我们将为你介绍三种可以压缩视频大小的方法,一起来看看吧~ 一、嗨格式压缩大师 嗨格式压缩大师是一款专业的视频压缩软件&#xf…

全渠道客服体验:Rocket.Chat 的无缝互动 | 开源日报 No.41

RocketChat/Rocket.Chat Stars: 36.9k License: NOASSERTION Rocket.Chat 是一个完全可定制的开源通信平台,适用于具有高标准数据保护要求的组织。我们是团队沟通场景下的最终免费开源解决方案,可以实现同事之间、公司之间或客户之间的实时对话。提高生…

13. ShardingSphere-Proxy 数据库代理

Spring Cloud 微服务系列文章,点击上方合集↑ 1. 简介 ShardingSphere-Proxy是ShardingSphere分布式数据库中间件的一部分,它提供了数据库代理功能。通过引入ShardingSphere-Proxy,可以在无需改动应用程序代码的情况下,实现分库…

使用Process Monitor工具探测日志文件是程序哪个模块生成的

目录 1、问题描述 2、使用Process Monitor监测目标文件是哪个模块生成的思路说明 3、操作Process Monitor监测日志文件是哪个模块生成的 4、通过screenctach.dll库的时间戳,找到其pdb文件,然后去查看详细的函数调用堆栈 5、最后 VC常用功能开发汇总…

用智能文字识别技术赋能古彝文数字化之路

目录 1、前言 2、对古彝文古籍的保护迫在眉睫 3、古彝文识别的难点问题 4、古彝文文字识别的关键技术 4.1、智能高清滤镜技术 4.2、图像矫正 4.3、图像增强 4.4、版面还原 5、合合信息识别技术赋能古彝文数字化 1、前言 古彝文指的是在云南、贵州、四川等地的彝族人之…

uniapp 可输入可选择的........框

安装 uniapp: uni-combox地址 vue页面 <uni-combox :border"false" input"selectname" focus"handleFocus" blur"handleBlur" :candidates"candidates" placeholder"请选择姓名" v-model"name"&g…

yolov5及yolov7实战之剪枝

之前有讲过一次yolov5的剪枝&#xff1a;yolov5实战之模型剪枝_yolov5模型剪枝-CSDN博客 当时基于的是比较老的yolov5版本&#xff0c;剪枝对整个训练代码的改动也比较多。最近发现一个比较好用的剪枝库&#xff0c;可以在不怎么改动原有训练代码的情况下&#xff0c;实现剪枝的…

使用自定义注解发布webservice服务

使用自定义注解发布webservice服务 概要代码自定义注解WebService接口服务发布配置使用 结果 概要 在springboot使用webservice&#xff0c;发布webservice服务的时候&#xff0c;我们经常需要手动在添加一些发布的代码&#xff0c;比如&#xff1a; Bean public Endpoint or…

破信息壁垒,亿发一站式ERP系统建设,打造五金制造信息管理平台

五金制造拥有明显的行业特征&#xff0c;如体量小、品种繁多、颜色多样、加工工艺不断演进等&#xff0c;呈现出一种独特的管理挑战。大多数五金企业仍然依赖人工管理和经验决策&#xff0c;如今需要寻求更合理和科学的决策方法&#xff0c;以实现生产、销售、仓储、采购和财务…

百度SEO优化技巧(选择、网站结构、内容优化、外链建设、数据分析)

百度关键词SEO优化介绍 SEO是搜索引擎优化的缩写&#xff0c;是指通过优化网站结构、内容和外部链接等方式&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而获取更多的访问量和流量。百度是中国最大的搜索引擎之一&#xff0c;对于企业来说&#xff0c;优化百度关键词…

uniapp 事件委托失败 获取不到dataset

问题&#xff1a; v-for 多个span ,绑定点击事件 代码:view里包着一个span, <view class"status-list" tap"search"><span class"status-item" v-for"(key,index) in statusList" :key"index" :data-key"k…