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

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

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

相关文章

【AI绘画】文心一格

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

数据结构-绪论

目录 前言一、从问题到程序二、数据结构的研究内容三、理解数据结构3.1 数据3.2 结构3.2.1 逻辑结构的分类3.2.2 存储结构的分类 3.3 数据结构 总结 前言 本篇文章先介绍数据结构的研究内容,然后再介绍如何去理解数据结构,着重介绍表示数据结构关系的逻…

springboot与flowable(5):任务分配(表达式)

在做流程定义时我们需要给相关的用户节点指派对应的处理人。在flowable中提供了三种分配的方式。 一、固定分配 在分配用户时选择固定值选项确认即可。 二、表达式 1、值表达式 2、方法表达式 三、表达式流程图测试 1、导出并部署 导出流程图,复制到项目中 部署流…

机器学习——集成学习和梯度提升决策树

集成学习 不同的算法都可以对解决同一个问题,但是可能准确率不同,集成学习就是不同算法按照某种组合来解决问题,使得准确率提升。 那怎么组合算法呢? 自举聚合算法**(bagging)** 顾名思义是 自举聚合 自举…

怎么做成的文件二维码?扫阅览文件的制作方法

现在用二维码来分享或者查看文件是一种很常用的方式,比如常见的文件内容有简历、资料、作品、压缩包等等。通过将文件生成二维码能够在提升文件传输速度的同时还有利于用户体验的提升,那么如何制作可以长期提供文件预览或者下载的二维码呢? …

【Redis实战篇】redis的擅长实现的功能

🔥作者主页:小林同学的学习笔录 🔥小林同学的专栏:JAVA之基础专栏 【Redis实战篇】Redis有可能出现的问题以及如何解决问题_redis实现用户登录可能造成哪些问题-CSDN博客 本文接上面的文章 目录 2.优惠券秒杀 2.1 全局唯一ID 2.…

新办理北京广播电视节目制作许可证需要什么条件

在北京想要从事广播电视节目制作,那就需要企业拥有广播电视节目制作经营许可证。此许可证不仅是企业合法经营的基础,同时也是保障节目制作质量和内容合规的标志。如何办理,详情致电咨询我或者来公司面谈。 北京广播电视节目制作经营许可证申请…

访问jlesage/firefox镜像创建的容器中文乱码问题

目录 介绍总结 介绍 最近在使用jlesage/firefox镜像创建容器的时候,发现远程管理家里网络的时候中文会出现乱码,导致整个体验非常的不好,网上查找资料说只要设置环境变量ENABLE_CJK_FONT1 就可以解决问题,抱着试一试的态度还真的成…

「网络原理」IP 协议

🎇个人主页:Ice_Sugar_7 🎇所属专栏:计网 🎇欢迎点赞收藏加关注哦! IP 协议 🍉报头结构🍉地址管理🍌动态分配 IP 地址🍌NAT 机制(网络地址映射&am…

示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名

一、目的&#xff1a;通过重写DataGrid的OnAutoGeneratingColumn方法实现根据定义特性自动生成列头信息功能 二、实现 <DataGrid ItemsSource"{local:GetStudents Count50}"/>实体定义如下 public class Student{[DataGridColumn("*")][Display(Na…

iOS18那些隐藏有趣的新功能分享!

WWDC 2024开幕式结束后&#xff0c;苹果迅速向开发者推送了iOS 18的首个测试版更新。很多果粉和小编一样&#xff0c;第一时间进行了升级。 自定义应用图标位置和颜色、应用锁、隐藏图标、全新控制中心、新增密码应用以及照片重新排版等新功能都表现出色。这些明面上的新功能大…

网络安全等级保护制度详解,一文掌握核心要点!

一、等级保护制度发展情况 等级保护制度的法律依据 《计算机信息系统安全保护条例》&#xff08;1994年General Office of the State Council第147号令&#xff09; 公安部主管全国计算机信息系统安全保护工作。 计算机信息系统实行安全等级保护&#xff0c;安全等级的划分…

目录文件管理

文章目录 Linux目录结构树形目录结构根目录常见的子目录子目录的作用 查看及检索文件查看文件内容cat格式 more格式操作方法 less格式操作方法 head格式 tail格式 统计文件内容wc格式选项 检索和过滤文件内容grep格式选项查找条件 备份及恢复文档压缩命令gzip bzip2格式压缩解压…

Redis 网络模型

一、用户空间和内核空间 1.1 linux 简介 服务器大多采用 Linux 系统&#xff0c;这里我们以 Linux 为例来讲解&#xff0c;下面有两个不同的 linux 发行版&#xff0c;分别位 ubuntu 和 centos&#xff0c;其实发行版就是在 Linux 系统上包了一层壳。 任何 Linux 发行版&#…

详细图文手把手教你阿里云注册域名如何托管到CloudFlare DNS服务

1.第一步&#xff1a;注册并登录Cloudflare账号&#xff0c;点击右上角“添加站点”&#xff0c;进入下图页面填写域名&#xff0c;点击继续。 2.第二步&#xff1a;进入页面滑动到最下方&#xff0c;选择Free免费套餐&#xff0c;再次点击继续。 3.第三步&#xff1a;这个页面…

c# 二维图形绘制实践

1.等边三角形 1.1 概述 1.2 代码 using System; using System.Drawing; using System.Windows.Forms;public partial class TriangleForm : Form {public TriangleForm(){//InitializeComponent();// 确保窗体大小足够大&#xff0c;以容纳三角形 this.ClientSize new Siz…

AbMole带你探索细胞的“铁”门:Piezo1通道在椎间盘退变中的关键角色

在生物医学领域&#xff0c;铁是细胞功能不可或缺的元素&#xff0c;但铁的异常积累却可能成为细胞的“隐形杀手”。最近&#xff0c;一项发表在《Bone Research》上的研究&#xff0c;为我们揭开了铁代谢与椎间盘退变之间神秘联系的一角。这项研究不仅深化了我们对铁离子通道P…

5个超实用1688选品技巧!轻松出单999+

1、研究市场需求 通过市场调查和分析&#xff0c;了解目标市场的消费者喜好和趋势。选择具有市场需求且竞争相对较小的产品类别。 用店雷达热销商 品榜和飙升商 品榜。比如做女装类目&#xff0c;选择“女士T恤”我们可以根据日、周、月为时间维度下商品的销售笔数、件数、销…

Browserslist: caniuse-lite is outdated。浏览器列表:caniuse lite已经过时???

一、最近运行项目启动时提示 Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-dblatest Why you should do it regularly: https://github.com/browserslist/update-db#readme 这要是这一句&#xff0c;Browserslist: caniuse-lite is outdated.…

大神出新品,吴恩达开源机器翻译智能体项目

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…