第9章 类
第9章 类
- 9.1 创建和使用类
- 9.1.1 创建 Dog 类
- 9.1.2 根据类创建实例
- 9.2 使用类和实例
- 9.2.1 Car 类
- 9.2.2 给属性指定默认值
- 9.2.3 修改属性的值
- 9.3 继承
- 9.3.1 子类的方法__init__()
- 9.3.2 给子类定义属性和方法
- 9.3.3 重写父类的方法
- 9.3.4 将实例用作属性
- 9.3.5 模拟实物
- 9.4 导入类
- 9.4.1 导入单个类
- 9.4.2 在一个模块中存储多个类
- 9.4.3 从一个模块中导入多个类
- 9.4.4 导入整个模块
- 9.4.5 导入模块中的所有类
- 9.4.6 在一个模块中导入另一个模块
- 9.4.7 使用别名
- 9.4.8 自定义工作流程
- 9.5 Python 标准库
- 9.6 类编码风格

9.1 创建和使用类
9.1.1 创建 Dog 类
类中的函数称为方法,前面学到的有关函数的一切都适用于方法,就目前而言,唯一重要的差别是调用方法的方式。
class Dog:def __init__(self, name, age):self.name = nameself.age = agedef sit(self):print(f"{self.name} is now sitting.")
9.1.2 根据类创建实例
- 访问属性
- 调用方法
- 创建多个实例
mydog = Dog('zhouzhou', 3) # 创建实例
print(f"{mydog.name} is {mydog.age} years old.") # 访问属性
mydog.sit() # 调用方法
herdog = Dog('maomao', 5) # 创建多个实例
herdog.sit() # 调用方法

9.2 使用类和实例
9.2.1 Car 类
编写一个表示汽车的类。它存储了有关汽车的信息,还有一个汇总这些信息的方法。
class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yeardef description(self):print(f"{self.make} {self.model} {self.year}")mycar = Car(2024, 'Au', 'A7') # 创建实例
mycar.description()
9.2.2 给属性指定默认值
创建实例时,有些属性无须通过形参来定义,可在方法__init__()中为其指定默认值。
9.2.3 修改属性的值
- 直接修改属性的值
- 通过方法修改属性的值
- 通过方法对属性的值进行递增
class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearself.odometer = 0 # 给属性指定默认值def description(self):print(f"{self.make} {self.model} {self.year}")def read_odometer(self):print(f"This car has {self.odometer} miles on it.")def update_odometer(self, mile): # 通过方法修改属性的值self.odometer = miledef add_odometer(self, miles): # 通过方法对属性的值递增self.odometer += milesmycar = Car(2024, 'Au', 'A7') # 创建实例
mycar.description() # 2024 Au A7
mycar.read_odometer() # This car has 0 miles on it.
# 1、直接修改属性的值
mycar.odometer = 20
mycar.read_odometer() # This car has 20 miles on it.
# 2、通过方法修改属性的值
mycar.update_odometer(30)
mycar.read_odometer() # This car has 30 miles on it.# 3、通过方法对属性的值递增
mycar.add_odometer(5)
mycar.read_odometer() # This car has 35 miles on it.

9.3 继承
9.3.1 子类的方法__init__()
在既有类的基础上编写新类时,通常要调用父类的方法__init__()。这将初始化在父类__init__()方法中定义的所有属性,从而让子类包含这些属性。
class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yeardef description(self):print(f"{self.make} {self.model} {self.year}")class ElectricCar(Car): # 继承Cardef __init__(self, make, model, year):super().__init__(make, model, year)mycar = ElectricCar(2024, 'Au', 'A7') # 创建实例
mycar.description()
创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类ElectricCar时,必须在圆括号里指定父类的名称Car。
9.3.2 给子类定义属性和方法
让一个类继承另一个类后,就可以添加区分子类和父类所需的新属性和新方法了。
class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yeardef description(self):print(f"{self.make} {self.model} {self.year}")class ElectricCar(Car): # 继承Cardef __init__(self, make, model, year):super().__init__(make, model, year)self.battery = 85 # 新属性def prt_battery(self):print(f"{self.battery}%")mycar = ElectricCar(2024, 'Au', 'A7') # 创建实例
mycar.description()
mycar.prt_battery() # 新方法
9.3.3 重写父类的方法
在子类中定义一个与要重写的父类方法同名的方法。
class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yeardef description(self):print(f"{self.make} {self.model} {self.year}")class ElectricCar(Car): # 继承Cardef __init__(self, make, model, year):super().__init__(make, model, year)self.battery = 85def description(self):print(f"{self.make} {self.model} {self.year} {self.battery}")mycar = ElectricCar(2024, 'Au', 'A7') # 创建实例
mycar.description() # 2024 Au A7 85
9.3.4 将实例用作属性
将类的一部分提取出来,作为一个独立的类。
9.3.5 模拟实物
解决问题时,从较高的逻辑层面考虑,考虑的不是 Python,而是如何使用代码来表示实物。
9.4 导入类
9.4.1 导入单个类
通过将这个类移到一个模块中并导入该模块,依然可以使用所有功能,但主程序文件变得整洁
而易于阅读了。
创建一个只包含Car类的模块,并命名为car.py。
然后创建另一个文件my_car.py,在其中导入Car类并创建实例。
from car import Car
my_car = Car(2024, 'Au', 'A7') # 创建实例
my_car.description()
9.4.2 在一个模块中存储多个类
虽然同一个模块中的类之间应存在相关性,但可根据需要在一个模块中存储任意数量的类。
9.4.3 从一个模块中导入多个类
可根据需要在程序文件中导入任意数量的类。
from car import Car, ElectricCar
9.4.4 导入整个模块
可以导入整个模块,再使用句点表示法访问需要的类。
import car
my_car = car.ElectricCar('tesla', 'r', 2024)
9.4.5 导入模块中的所有类
需要从一个模块中导入很多类时,最好导入整个模块 。
from module_name import *
9.4.6 在一个模块中导入另一个模块
将类分散到多个模块中,以免模块太大或在同一个模块中存储不相关的类。
9.4.7 使用别名
导入类时,也可为其指定别名。
9.4.8 自定义工作流程
熟悉Python 提供的选项,这样才能确定哪种组织方式是最佳的,并能理解别人开发的项目。
9.5 Python 标准库
类名应采用驼峰命名法.
每个类,都应紧跟在类定义后面包含一个文档字符串。
可使用空行来组织代码,但不要滥用。
需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的 import 语句
9.6 类编码风格
Python 标准库是一组模块,我们安装的 Python 都包含它。
可以使用标准库中的任何函数和类,只需在程序开头包含一条简单的 import 语句即可。
相关文章:
第9章 类
第9章 类 9.1 创建和使用类9.1.1 创建 Dog 类9.1.2 根据类创建实例 9.2 使用类和实例9.2.1 Car 类9.2.2 给属性指定默认值9.2.3 修改属性的值 9.3 继承9.3.1 子类的方法__init__()9.3.2 给子类定义属性和方法9.3.3 重写父类的方法9.3.4 将实例用作属性9.3.5 模拟实物 9.4 导入类…...
Elasticsearch 第二期:倒排索引,分析,映射
前言 正像前面所说,ES真正强大之处在于可以从无规律的数据中找出有意义的信息——从“大数据”到“大信息”。这也是Elasticsearch一开始就将自己定位为搜索引擎,而不是数据存储的一个原因。因此用这一篇文字记录ES搜索的过程。 关于ES搜索计划分两篇或…...
函数的一点点习题
1、利用递归计算0-n的和 #include <stdio.h> #include <string.h> #include <stdlib.h> int rec(int n) {if(n0)return 0;elsereturn nrec(n-1); } int main(int argc, const char *argv[]) {int n0;printf("please enter n:");scanf("%d&quo…...
使用Java计算Linux系统中sum命令得到的校验值
目录 ■相关知识 ・sum 命令 ・BSD校验算法是什么 ・BSD校验算法 和hash值 有区别吗 ・BSD校验算法,为什么是BSD,这个缩写代表什么 ■Java代码 ■效果 ====== ■相关知识 ・…...
鸿蒙开发电话服务:【 @ohos.telephony.sms (短信服务)】
短信服务 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import sms from ohos.telephony.sms;sms.createMessage createMessage(pdu: Array, specification: string, callback: Asy…...
算法02 递归算法及其相关问题【C++实现】
递归 在编程中,我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是:通常把一个大型的复杂问题,转变成一个与原问题类似的,规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…...
Sermant标签路由能力在同城双活场景的应用
作者:聂子雄 华为云高级软件工程师 摘要:目前应用上云已成为趋势,用户也对应用在云上的高可靠方案有更高追求,目前同城双活场景作为应用高可靠方案中的一种常见实践方案,对微服务流量提出了数据中心亲和性的要求&…...
javascript-obfuscator混淆
安装 npm install javascript-obfuscator -g 配置 重度混淆,性能低 性能下降50-100% { "compact": true, "controlFlowFlattening": true, "controlFlowFlatteningThreshold": 0.75, // 设置为0到1之间的值 "deadCodeI…...
GitHub项目里的api
在一个GitHub项目中提到的"api"通常指的是该项目提供的应用程序编程接口(Application Programming Interface)。这意味着该项目包含了一套规则和工具,允许其他开发者通过代码调用该接口来与项目功能互动、获取数据或执行特定任务。…...
k8s可练习实验分享
实验环境介绍:单master节点+3node节点 环境已提前配置完毕,如果你环境还未做,请移步 k8s集群V1.27.3安装 在 k8s 上可以做许多实验来提升你的动手能力和理解。以下是一些常见且有用的实验项目: 1、部署一个简单的应用…...
浏览器支持http-flv协议
Google Chrome 浏览器和Microsoft Edge 浏览器原生并不支持 HTTP-FLV 协议。HTTP-FLV 主要与 Flash Player 相关,而 Flash Player 已经在 2020 年底停止支持,并且 Microsoft Edge 也逐步淘汰了对 Flash 的支持。 flv.js 利用 HTML5 和 Media Source Exte…...
一千题,No.0077(计算谱半径)
在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a1b1i,⋯,anbni },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。 现在给定一些复数空间的特征值&a…...
安卓/iOS/Linux系统影音边下边播P2P传输解决方案
在当今的数字时代,IPTV 影音行业正经历着快速的发展和变革,但影音行业的流量带宽成本一直很高,有没有什么办法既能保证现有的用户观看体验,又能很好降低流量带宽成本呢? P2P技术可能是一个很好的选择,它不仅仅可以提…...
STORM论文阅读笔记
这是篇NIPS2023的 world model 论文文章提出,WM的误差会在训练过程中积累从而影响policy的训练,向WM中加噪声可以改善这一点。其他的流程和IRIS差不多,差别在以下几点: image encoder,IRIS用的VQVAE, 本文用的是VAE&am…...
Web前端遇到的难题:挑战与突破之路
Web前端遇到的难题:挑战与突破之路 在快速发展的互联网时代,Web前端技术作为连接用户与应用程序的桥梁,扮演着举足轻重的角色。然而,在实际开发中,Web前端开发者往往会遇到诸多难题。本文将从四个方面、五个方面、六个…...
C#防止多次注册事件
事件声明和使用部分的代码,防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现 public class ReRegisterEvent {public delegate void Mydelegate(string message);private Mydelegate? mydel;public event Mydelegate Myevent{add{if (mydel null){…...
【UML用户指南】-16-对高级结构建模-构件
目录 1、概念 2、构件与接口 3、可替换性 4、组织构件 5、端口 6、内部结构 6.1、部件 6.2、连接件 7、常用建模技术 7.1、对结构类建模 7.2、对API建模 构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定…...
双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)
文章目录 前言一、双Token方案介绍1. 令牌类型与功能2.双Token方案的优点3.实现流程 二、具体实现1.后端实现1.1 jwt工具类1.2 响应工具类1.3 实体类1.4 过滤器1.5 controller1.6 启动类 2、前端实现2.1 登录页面2.2 index页面2.3 请求拦截器和响应拦截器 效果展示 前言 更多j…...
别太小看“静态免杀“
0x01 简述 免杀总体来说可分为两种,静态免杀/动态免杀。往往来说,我们更注重于在内部代码层面实现一些免杀技巧,但在有些时候,动态免杀静态免杀以"打组合拳"的方式效果往往会更出人所料。 当我们的程序生成后…...
SQL server 内连接 左连接 右连接 全连接 语句
在SQL Server中,连接(JOIN)操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别: 1. 内连接 (INNER JOIN) 内连接只返回两个表中满足连接条件的匹…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
