第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 = name
        self.age = age

    def 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 = make
        self.model = model
        self.year = year

    def 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 = make
        self.model = model
        self.year = year
        self.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 = mile

    def add_odometer(self, miles):  # 通过方法对属性的值递增
        self.odometer += miles


mycar = 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 = make
        self.model = model
        self.year = year

    def description(self):
        print(f"{self.make} {self.model} {self.year}")


class ElectricCar(Car):  # 继承Car
    def __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 = make
        self.model = model
        self.year = year

    def description(self):
        print(f"{self.make} {self.model} {self.year}")
        
class ElectricCar(Car):  # 继承Car
    def __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 = make
        self.model = model
        self.year = year

    def description(self):
        print(f"{self.make} {self.model} {self.year}")


class ElectricCar(Car):  # 继承Car
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = 85

    def 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 语句即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短URL服务设计

引言 在营销系统里,为了增加系统的活跃用户数,经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值,促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的,群发优惠券触达短信这种场景。…

充电学习—3、Uevent机制和其在android层的实现

sysfs 是 Linux userspace 和 kernel 进行交互的一个媒介。通过 sysfs,userspace 可以主动去读写 kernel 的一些数据,同样的, kernel 也可以主动将一些“变化”告知给 userspace。也就是说,通过sysfs,userspace 和 ker…

欣九康诊疗系统助力诊所向数字化转型

数字化已经成为各行各业转型的重点方向,而为了不被时代所淘汰,医疗机构也势必要紧跟潮流,本人作为门诊部的负责人深知医疗机构要想实现数字化转型那么拥有一款便捷实用的医疗平台是必不可少的,近几年,随着国家大力支持…

Ubuntu 在线或离线安装docker

查看自己的ubuntu版本 在终端中执行以下命令: lsb_release -a 终端中的复制粘贴: ctrl shift c ctrl shifr v 在线安装docker(不需要外网): 命令行安装:Ubuntu Docker -- 从入门到实践 看完…

Ollama:本地部署大模型 + LobeChat:聊天界面 = 自己的ChatGPT

本地部署大模型 在本地部署大模型有多种方式,其中Ollama方式是最简单的,但是其也有一定的局限性,比如大模型没有其支持的GGUF二进制格式,就无法使用Ollama方式部署。 GGUF旨在实现快速加载和保存大语言模型,并易于阅读…

香港Web3时代:比特币可以成为「收益性资产」吗?

原文标题:《CAN BITCOIN BE A PRODUCTIVE ASSET?》撰文:Pascal Hgli编译:Chris,Techub News本文来源香港Web3媒体 Techub News 比特币正在经历一场大的变化,人们对其性质有不同的看法。有些人将其视为日常交易的货币…

ANSYS EMC解决方案与经典案例

EMC问题非常复杂,各行各业都会涉及,例如航空、航天、船舶、汽车、火车、高科技、物联网、消费电子。要考虑EMC的对象很多,包含整个系统、设备、PCB、线缆、电源、芯片封装。而且技术领域覆盖广,涉及高频问题、低频问题&#xff1b…

AI大模型系统从入门到精通,看这一篇就够了

前言 2023 年,人工智能发展达到新的里程碑。自 GPT 系列和 LLaMA 系列等大规模语言模型及应用问世以来,AI 内部技术突飞猛进,能力迅速超越以往。这些“超级 AI 助手”看似便捷强大,但其背后复杂原理及潜在影响值得深入思考。 这些…

充电学习—5、healthed 电池服务

1、healthed服务监听接收内核kernel的电池事件,然后上传数据给framware层的batterysevice,BatteryService计算电池的电量,显示,绘制动画等 android电池系统框架: 2、healthd服务入口:android/system/cor…

本地安装nightingale监控分析服务并发布公网详细流程

文章目录 前言1. Linux 部署Nightingale2. 本地访问测试3. Linux 安装cpolar4. 配置Nightingale公网访问地址5. 公网远程访问Nightingale管理界面6. 固定Nightingale公网地址 前言 本文主要介绍如何在本地Linux系统部署 Nightingale 夜莺监控并结合cpolar内网穿透工具实现远程…

怎么把两个音频合成一个?将两个音频合成一个的四种方法

怎么把两个音频合成一个?在当今数字化的时代,音频处理已经成为我们生活中不可或缺的一部分。有时候,我们会希望将两段音频合成为一个,无论是为了制作音乐混音、创作声音效果,还是为了编辑播客节目或视频配音。合成音频…

Qt第三方库QHotKey设置小键盘数字快捷键

一、看了一圈没有找到可以设置小键盘的情况。 这两天在研究快捷键的使用。发现qt的里的快捷键不是全局的。找了两个第三方快捷键QHotKey,还有一个QxtGlobalShortcut。但是这两个都不能设置小键盘的数字。 比如QKeySequenceEdit (Ctrl1) 这个…

springboot小型超市商品展销系统-计算机毕业设计源码01635

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…

onnx基本概念

onnx基本概念 参考 文章目录 onnx基本概念Input, Output, Node, Initializer, AttributesSerialization with protobuf元数据List of available operators and domains支持的类型Opset版本Subgraphs, tests and loopsExtensibilityFunctionsShape (and Type) Inferencetools O…

Fiddler抓包工具介绍

下载 下载:Web Debugging Proxy and Troubleshooting Tools|Fiddler 进去要填一个表 汉化版 百度网盘 请输入提取码 提取码:xq9t 下载过附件之后分别把两个文件 点开fiddler就ok了 配置https fiddler要想抓到https包(解密的),点击tools->options勾选三个对…

数据结构之“双向链表”

前言 前面我们介绍了单向链表,我们这里的双向链表是为了弥补单向链表只能从头节点开始单向遍历,插入和删除节点时需要更多的操作,因为无法直接访问前一个节点。 目录 前言 一、双向链表的结构 二、实现双向链表 2.1符号定义 2.2节点创…

半监督学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 介绍一、Self Training自训练1、介绍2、代码示例3、参数解释 二、Label Propagation(标签传播)1、介绍2、代码示例3、参数解释 三、Label Spread…

物联网工程的未来发展趋势及影响

物联网工程是在互联网基础上的一种新兴技术,其核心思想是通过网络连接不同物体,实现智能化的交流与互动。在未来,物联网工程将继续向更多领域发展,如智能家居、智能城市、智能交通等。首先,物联网工程在智能家居领域的…

华为中小企业组网

一、组网图 说明:接入交换机ACC1(S2750),核心/汇聚交换机CORE( S5700 )和出口路由器Router(AR系列路由器)为例。 核心交换机配置VRRP保证网络可靠性,配置负载分担有效利…

Windows 10永久关闭“系统准备工具 3.14“禁止开机自启

文章目录 一、问题描述二、解决方法总结 一、问题描述 每次开机都会显示如下图所示的 系统准备工具 3.14 二、解决方法 按win R键打开运行窗口 → 输入cmd → 点击 确定 如图所示输入下面如图所示代码 → 按 回车 → 输入 Y → 按 回车 XCOPY C:\windows\System32\svchost.e…