当前位置: 首页 > news >正文

第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 根据类创建实例

  1. 访问属性
  2. 调用方法
  3. 创建多个实例
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 修改属性的值

  1. 直接修改属性的值
  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校验算法&#xff0c;为什么是BSD&#xff0c;这个缩写代表什么 ■Java代码 ■效果 &#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d; ■相关知识 ・…...

鸿蒙开发电话服务:【 @ohos.telephony.sms (短信服务)】

短信服务 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import sms from ohos.telephony.sms;sms.createMessage createMessage(pdu: Array, specification: string, callback: Asy…...

算法02 递归算法及其相关问题【C++实现】

递归 在编程中&#xff0c;我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是&#xff1a;通常把一个大型的复杂问题&#xff0c;转变成一个与原问题类似的&#xff0c;规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…...

Sermant标签路由能力在同城双活场景的应用

作者&#xff1a;聂子雄 华为云高级软件工程师 摘要&#xff1a;目前应用上云已成为趋势&#xff0c;用户也对应用在云上的高可靠方案有更高追求&#xff0c;目前同城双活场景作为应用高可靠方案中的一种常见实践方案&#xff0c;对微服务流量提出了数据中心亲和性的要求&…...

javascript-obfuscator混淆

安装 npm install javascript-obfuscator -g 配置 重度混淆&#xff0c;性能低 性能下降50-100% { "compact": true, "controlFlowFlattening": true, "controlFlowFlatteningThreshold": 0.75, // 设置为0到1之间的值 "deadCodeI…...

GitHub项目里的api

在一个GitHub项目中提到的"api"通常指的是该项目提供的应用程序编程接口&#xff08;Application Programming Interface&#xff09;。这意味着该项目包含了一套规则和工具&#xff0c;允许其他开发者通过代码调用该接口来与项目功能互动、获取数据或执行特定任务。…...

k8s可练习实验分享

实验环境介绍&#xff1a;单master节点&#xff0b;3node节点 环境已提前配置完毕&#xff0c;如果你环境还未做&#xff0c;请移步 k8s集群V1.27.3安装 在 k8s 上可以做许多实验来提升你的动手能力和理解。以下是一些常见且有用的实验项目&#xff1a; 1、部署一个简单的应用…...

浏览器支持http-flv协议

Google Chrome 浏览器和Microsoft Edge 浏览器原生并不支持 HTTP-FLV 协议。HTTP-FLV 主要与 Flash Player 相关&#xff0c;而 Flash Player 已经在 2020 年底停止支持&#xff0c;并且 Microsoft Edge 也逐步淘汰了对 Flash 的支持。 flv.js 利用 HTML5 和 Media Source Exte…...

一千题,No.0077(计算谱半径)

在数学中&#xff0c;矩阵的“谱半径”是指其特征值的模集合的上确界。换言之&#xff0c;对于给定的 n 个复数空间的特征值 { a1​b1​i,⋯,an​bn​i }&#xff0c;它们的模为实部与虚部的平方和的开方&#xff0c;而“谱半径”就是最大模。 现在给定一些复数空间的特征值&a…...

安卓/iOS/Linux系统影音边下边播P2P传输解决方案

在当今的数字时代&#xff0c;IPTV 影音行业正经历着快速的发展和变革&#xff0c;但影音行业的流量带宽成本一直很高&#xff0c;有没有什么办法既能保证现有的用户观看体验&#xff0c;又能很好降低流量带宽成本呢? P2P技术可能是一个很好的选择&#xff0c;它不仅仅可以提…...

STORM论文阅读笔记

这是篇NIPS2023的 world model 论文文章提出&#xff0c;WM的误差会在训练过程中积累从而影响policy的训练&#xff0c;向WM中加噪声可以改善这一点。其他的流程和IRIS差不多&#xff0c;差别在以下几点&#xff1a; image encoder&#xff0c;IRIS用的VQVAE, 本文用的是VAE&am…...

Web前端遇到的难题:挑战与突破之路

Web前端遇到的难题&#xff1a;挑战与突破之路 在快速发展的互联网时代&#xff0c;Web前端技术作为连接用户与应用程序的桥梁&#xff0c;扮演着举足轻重的角色。然而&#xff0c;在实际开发中&#xff0c;Web前端开发者往往会遇到诸多难题。本文将从四个方面、五个方面、六个…...

C#防止多次注册事件

事件声明和使用部分的代码&#xff0c;防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现 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建模 构件是系统中逻辑的并且可替换的部分&#xff0c;它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定…...

双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 简述 免杀总体来说可分为两种&#xff0c;静态免杀/动态免杀。往往来说&#xff0c;我们更注重于在内部代码层面实现一些免杀技巧&#xff0c;但在有些时候&#xff0c;动态免杀静态免杀以"打组合拳"的方式效果往往会更出人所料。 当我们的程序生成后&#xf…...

SQL server 内连接 左连接 右连接 全连接 语句

在SQL Server中&#xff0c;连接&#xff08;JOIN&#xff09;操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别&#xff1a; 1. 内连接 (INNER JOIN) 内连接只返回两个表中满足连接条件的匹…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

raid存储技术

1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划&#xff0c;涵盖存储系统的布局、数据存储策略等&#xff0c;它明确数据如何存储、管理与访问&#xff0c;为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征&#xff08;均值、比率、总量&#xff09;控制抽样误差与非抽样误差 解决的核心问题 在成本约束下&#xff0c;用少量样本准确推断总体特征量化估计结果的可靠性&#xff08;置…...

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表&#xff0c;并对每一个位置进行分类。这种做法既浪费又低效&#xff0c;并且需要额外的后处理。在本文中&#xff0c;我们采取了不同的方法。我们将物体建模为单…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...