学Python的漫画漫步进阶 -- 第九步

news2024/12/23 18:06:44

学Python的漫画漫步进阶 -- 第九步

  • 九、类与对象
    • 9.1 面向对象
    • 9.2 定义类
    • 9.3 创建对象
    • 9.4 类的成员
      • 9.4.1 实例变量
      • 9.4.2 构造方法
      • 9.4.3 实例方法
      • 9.4.4 类变量
      • 9.4.5 类方法
    • 9.5 封装性
      • 9.5.1 私有变量
      • 9.5.2 私有方法
      • 9.5.3 使用属性
    • 9.6 继承性
      • 9.6.1 Python中的继承
      • 9.6.2 多继承
      • 9.6.3 方法重写
    • 9.7 多态性
      • 9.7.1 继承与多态
      • 9.7.2 鸭子类型测试与多态
    • 9.8 练一练
    • 9.9 类与对象的总结

九、类与对象

在Python中,类是创建对象的蓝图或模板,而对象是类的实例。

以下是类和对象的定义方式:

  1. 类的定义:

使用class关键字来定义一个类,类名通常以大写字母开头。类的定义可以包含属性(变量)和方法(函数)。

class MyClass:
    # 属性
    my_variable = 10
    
    # 方法
    def my_function(self):
        print("Hello World!")
  1. 对象的定义:

使用类名和括号来创建一个对象,可以使用属性和方法来访问和修改对象的状态。

# 创建一个对象
my_object = MyClass()

# 访问对象的属性
print(my_object.my_variable)

# 调用对象的方法
my_object.my_function()

在类定义中,属性和方法都需要使用缩进来表示它们属于类的定义。在方法中,第一个参数通常是self,表示对象本身。可以使用self来访问对象的属性和方法。

本章详细介绍类和对象,前面多次提到类,它到底是什么意思呢?
在这里插入图片描述

9.1 面向对象

类和对象都是面向对象中的重要概念。面向对象是一种编程思想,即按照真实世界的思维方式构建软件系统。
例如,在真实世界的校园里有学生和老师,学生有学号、姓名、所在班级等属性(数据),还有学习、提问、吃饭和走路等动作(方法)。如果我们要开发一个校园管理系统,那么在构建软件系统时,也会有学生和老师等“类”,张同学、李同学是学生类的个体,被称为“对象”,

“对象”也被称为“实例”。

在这里插入图片描述

9.2 定义类

Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型。Python中类的定义语法格式如右图所示。
定义小汽车(Car)类的代码如下:

在这里插入图片描述
在这里插入图片描述
小汽车(Car)类继承了object类,object类是所有类的根类,在Python中任何一个类(除object外)都直接或间接地继承了object,直接继承object时(object)部分的代码可以省略。

在这里插入图片描述
在这里插入图片描述

9.3 创建对象

类相当于一个模板,依据这样的模板来创建对象,就是类的实例化,所以对象也被称为“实例”。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.4 类的成员

在这里插入图片描述

成员变量也被称为数据成员,保存了类或对象的数据。例如,学生的姓名和学号。
构造方法是一种特殊的函数,用于初始化类的成员变量。
成员方法是在类中定义的函数。
属性是对类进行封装而提供的特殊方法。

在这里插入图片描述

在这里插入图片描述

9.4.1 实例变量

实例变量就是对象个体特有的“数据”,例如狗狗的名称和年龄等。

在这里插入图片描述
通过Python指令运行文件,输出结果:

在这里插入图片描述
在这里插入图片描述

9.4.2 构造方法

类中的__init__()方法是一个非常特殊的方法,用来创建和初始化实例变量,这种方法就是“构造方法”。在定义__init__()方法时,它的第1个参数应该是self,之后的参数用来初始化实例变量。调用构造方法时不需要传入self参数。
在这里插入图片描述

构造方法的示例代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

9.4.3 实例方法

实例方法与实例变量一样,都是某个实例(或对象)个体特有的方法。
定义实例方法时,它的第1个参数也应该是self,这会将当前实例与该方法绑定起来,这也说明该方法属于实例。在调用方法时不需要传入self,类似于构造方法。
下面看一个定义实例方法的示例:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

9.4.4 类变量

类变量是属于类的变量,不属于单个对象。
例如,有一个Account(银行账户)类,它有三个成员变量:amount(账户金额)、interest_rate (利率)和owner(账户名)。amount和owner对于每一个账户都是不同的,而interest_rate对于所有账户都是相同的。amount和owners是实例变量,interest_rate是所有账户实例共享的变量,它属于类,被称为“类变量”。
类变量的示例代码如下:

在这里插入图片描述

在这里插入图片描述

通过Python指令运行文件,输出结果

在这里插入图片描述

9.4.5 类方法

类方法与类变量类似,属于类,不属于个体实例。在定义类方法时,它的第1个参数不是self,而是类本身。定义类方法的示例代码如下:
在这里插入图片描述
通过Python指令运行文件,输出结果:

在这里插入图片描述

在这里插入图片描述

9.5 封装性

封装性是面向对象重要的基本特性之一。封装隐藏了对象的内部细节,只保留有限的对外接口,外部调用者不用关心对象的内部细节,使得操作对象变得简单。
例如,一台计算机内部极其复杂,有主板、CPU、硬盘和内存等,而一般人不需要了解它的内部细节。计算机制造商用机箱把计算机封装起来,对外提供了一些接口,如鼠标、键盘和显示器等,使用计算机就变得非常简单。
在这里插入图片描述

9.5.1 私有变量

为了防止外部调用者随意存取类的内部数据(成员变量),内部数据(成员变量)会被封装为“私有变量”。外部调用者只能通过方法调用私有变量。在默认情况下,Python中的变量是公有的,可以在类的外部访问它们。如果想让它们成为私有变量,则在变量前加上双下画线(__)即可。
示例代码如下:

在这里插入图片描述
在这里插入图片描述
由于在类的外部不可以访问私有变量,因此上述代码在运行时会发生错误,通过Python指令运行文件,输出结果:

在这里插入图片描述

9.5.2 私有方法

私有方法与私有变量的封装是类似的,在方法前加上双下画线(__)就是私有方法了。示例代码如下:
在这里插入图片描述

由于在类的外部不可以访问私有方法,因此上述代码在运行时会发生错误,通过Python指令运行文件,输出结果:

在这里插入图片描述

9.5.3 使用属性

为了实现对象的封装,在一个类中不应该有公有的成员变量,这些成员变量应该被设计为私有的,然后通过公有的set (赋值)和get(取值)方法访问。
使用set和get方法进行封装,示例代码如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述
在这里插入图片描述

使用属性方式修改上面的示例,代码如下:

在这里插入图片描述
在这里插入图片描述

9.6 继承性

继承性也是面向对象重要的基本特性之一。
在现实世界中继承关系无处不在。例如猫与动物之间的关系:猫是一种特殊动物,具有动物的全部特征和行为,即数据和操作。在面向对象中动物是一般类,被称为“父类”;猫是特殊类,被称为“子类”。特殊类拥有一般类的全部数据和操作,可称之为子类继承父类。

在这里插入图片描述

9.6.1 Python中的继承

在Python中声明子类继承父类,语法很简单,定义类时在类的后面使用一对小括号指定它的父类就可以了。
下面是动物类继承图。

在这里插入图片描述

示例代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.6.2 多继承

在这里插入图片描述
在Python中,当子类继承多个父类时,如果在多个父类中有相同的成员方法或成员变量,则子类优先继承左边父类中的成员方法或成员变量,从左到右继承级别从高到低。
示例代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过Python指令运行文件,输出结果:

在这里插入图片描述

9.6.3 方法重写

如果子类的方法名与父类的方法名相同,则在这种情况下,子类的方法会重写(Override)父类的同名方法。
在这里插入图片描述

示例代码如下:

在这里插入图片描述
通过Python指令运行文件,输出结果:

在这里插入图片描述

9.7 多态性

多态性也是面向对象重要的基本特性之一。“多态”指对象可以表现出多种形态。
例如,猫、狗、鸭子都属于动物,它们有“叫”和“动”等行为,但是叫的方式不同,动的方式也不同。

在这里插入图片描述

9.7.1 继承与多态

在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态的。这些对象采用不同的方式实现父类方法。
示例代码如下:
在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

9.7.2 鸭子类型测试与多态

Python的多态性更加灵活,支持鸭子类型测试。鸭子类型测试指:
若看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟可以被称为鸭子。

在这里插入图片描述

由于支持鸭子类型测试,所以Python解释器不检查发生多态的对象是否继承了同一个父类,只要它们有相同的行为(方法),它们之间就是多态的。
例如,我们设计一个函数start(),它接收具有“叫”speak()方法的对象,代码如下:

在这里插入图片描述

在这里插入图片描述
我们定义了几个类,它们都有speak()方法。代码如下:

在这里插入图片描述

start()函数可以接收所有speak()方法对象,代码如下:

在这里插入图片描述

通过Python指令运行文件,输出结果:

在这里插入图片描述

9.8 练一练

1 在下列选项中,哪些是类的成员。()
A.成员变量
B.成员方法
C.属性
D.实例变量

2 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。
1)在Python中,类具有面向对象的基本特性,即封装性、继承性和多态性。()
2)init()方法用来创建和初始化实例变量,这种方法就是“构造方法”。()
3)类方法不需要与实例绑定,需要与类绑定,在定义时它的第1个参数不是self。()
4)实例方法是在类中定义的,它的第1个参数也应该是self,这个过程是将当前实例与该方法绑定起来。()
5)公有成员变量就是在变量前加上两个下画线(__)。()
6)属性是为了替代get()方法和set()方法。()
7)子类继承父类时继承父类中的所有成员变量和方法。()
8)Python中的继承是单继承。()

3 请介绍什么是“鸭子类型”?

9.9 类与对象的总结

在Python编程中,类(Class)和对象(Object)是非常基础且重要的概念。以下是对这两个概念的总结:

  1. 类(Class):
    类是创建对象的模板。你可以把类看作一个蓝图,它描述了如何创建对象。类定义了一组属性(可以是数据或函数),这些属性会在创建类的实例(即对象)时被初始化。

在Python中,你可以使用class关键字来定义一个类。例如:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def bark(self):
        print(f"{self.name} is barking!")

在这个例子中,Dog是一个类,它有两个属性:name和age,以及一个方法:bark。

  1. 对象(Object):
    对象是类的实例。你可以创建一个类的一个或多个实例,每个实例都有自己的属性和方法。当你创建一个对象时,Python会为这个对象分配内存空间,并在这个空间中存储这个对象的属性和方法。

在Python中,你可以使用类名和括号来创建一个对象。例如:

dog1 = Dog("Bobby", 3)
dog2 = Dog("Rex", 5)

在这个例子中,dog1和dog2都是Dog类的对象。它们都有自己的name和age属性,以及bark方法。

总的来说,类是定义如何创建对象的模板,而对象是类的实例,它们有类定义的属性和方法。

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

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

相关文章

DS线性表之顺序表

前言 上一期我们介绍了什么是数据结构和算法,以及介绍了算法效率问题即什么是时空复杂度~和时空复杂度的计算方式以及常见的时空复杂度的例题详解,本期我们来介绍一下线性表中的顺序表~! 本期内容介绍 什么是线性表? 顺序表的概…

Llama2-Chinese项目:2.2-大语言模型词表扩充

因为原生LLaMA对中文的支持很弱,一个中文汉子往往被切分成多个token,因此需要对其进行中文词表扩展。思路通常是在中文语料库上训练一个中文tokenizer模型,然后将中文tokenizer与LLaMA原生tokenizer进行合并,最终得到一个扩展后的…

Linux网络编程:网络编程套接字

目录 一. 端口号的概念 二. 对于UDP和TCP协议的认识 三. 网络字节序 3.1 字节序的概念 3.2 网络通信中的字节序 3.3 本地地址格式和网络地址格式 四. socket编程的常用函数 4.1 sockaddr结构体 4.2 socket编程常见函数的功能和使用方法 五. UDP协议实现网络通信 5.…

c语言练习题60:模拟实现atoi

模拟实现atoi 代码&#xff1a; #include<assert.h> #include<stdio.h> #include<ctype.h> #include<limits.h> int my_atoi(const char* str) {assert(str ! NULL);if (*str \0){return 0;}//isspace 判断一个字符是不是空格while (isspace(*str)){…

视频监控系统/安防监控/视频AI智能分析:小动物识别算法场景汇总

随着人们对生态环境的关注日益提升&#xff0c;大家对动物保护意识也逐渐增强。旭帆科技智能分析网关小动物识别算法应运而生。除了对保护动物的识别以外&#xff0c;旭帆科技AI智能分析网关还可以识别常见的老鼠等动物&#xff0c;助力明厨亮灶监管&#xff0c;保卫食品安全。…

一键集成prometheus监控微服务接口平均响应时长

一、效果展示 二、环境准备 prometheus + grafana环境 参考博文:https://blog.csdn.net/luckywuxn/article/details/129475991 三、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter

JAVAEE:采用HTML和JavaScript实现几个基本的页面

1.实现效果&#xff1a; <html><title>学生信息确认</title><body><Form>用户名:<input typetext id"usename"><br>密码: <input typepassword id"userpwd"><br>性别:<input typeradio id"…

华为云云耀云服务器L实例评测|手把手教你搭建MySQL数据库

1. 前言 本文将为读者介绍华为云的云耀云服务器L实例&#xff0c;并提供一份详细的手把手教程&#xff0c;帮助您快速搭建MySQL数据库。 MySQL是一款常用的关系型数据库管理系统&#xff0c;搭建与配置它对于许多业务应用和网站来说都是必需的。本文将以华为云【云耀云服务器L实…

模电2023.9.16

1、放大电路模型 根据功能基本可分为四大类&#xff1a; 电压放大、电流放大、互阻放大和互导放大。 注&#xff1a;互阻放大&#xff1a;电流信号转换为电压信号 互导放大&#xff1a;电压信号转换为电流信号 菱形的电源受控源&#xff0c;圆形的为非受控源 如何区分? 看输入…

【入门篇】ClickHouse 的安装与配置

文章目录 0. 前言ClickHouse的安装1. 添加 ClickHouse 的仓库2. 安装 ClickHouse3. 启动 ClickHouse 服务器4. 使用 ClickHouse 客户端 ClickHouse的配置 1. 详细安装教程1.1. 系统要求1.1. 可用安装包 {#install-from-deb-packages}1.1.1. DEB安装包1.1.1. RPM安装包 {#from-r…

C++中的导入include,头文件,extern,main函数入口及相关编译流程

结论&#xff1a; 1&#xff1a;#include就是复制粘贴 2&#xff1a;C编译的时候&#xff0c;在链接之前&#xff0c;各个文件之间实际上没有联系&#xff0c;只有到了链接的阶段&#xff0c;系统才会到各个cpp文件中去找需要的文件&#xff1b; 一&#xff1a;include的作用…

vue2必备知识点

1、生命周期钩子是如何实现的? 生命周期描述beforeCreatevue实例初始化后&#xff0c;数据观测&#xff08;data observer&#xff09;和事件配置之前。data、computed、watch、methods都无法访问。createdvue实例创建完成后立即调用 &#xff0c;可访问 data、computed、wat…

前端JavaScript中MutationObserver:监测DOM变化的强大工具

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. MutationObserver简介 2. MutationObserver的属性 3. MutationObserver的应用场景 3.1 动态内容加载 …

动手学深度学习_个人笔记01_李沐(更新中......)

序言 神经网络——本书中关注的DL模型的前身&#xff0c;被认为是过时的工具。 深度学习在近几年推动了CV、NLP和ASR等领域的快速发展。 关于本书 让DL平易近人&#xff0c;教会概念、背景和代码。 一种结合了代码、数学和HTML的媒介 测试深度学习&#xff08;DL&#xf…

FL Studio21.1.1.3750中文破解百度网盘下载地址含Crack补丁

FL Studio21.1.1.3750中文破解版是最优秀、最繁荣的数字音频工作站 (DAW) 之一&#xff0c;日新月异。它是一款录音机和编辑器&#xff0c;可让您不惜一切代价制作精美的音乐作品并保存精彩的活动画廊。 为方便用户&#xff0c;FL Studio 21提供三种不同的版本——Fruity 版、…

TrOCR——基于transformer模型的OCR手写文字识别

前期我们使用大量的篇幅介绍了手写数字识别与手写文字识别,当然那里主要使用的是CNN卷积神经网络,利用CNN卷积神经网络来训练文字识别的模型。 这里一旦提到OCR相关的技术,肯定第一个想到的便是CNN卷积神经网络,毕竟CNN卷积神经网络在计算机视觉任务上起到了至关重要的作用…

打造“共富果园” 广东乳源推动茶油全产业链高质量发展

新华网广州9月13日电&#xff08;李庆招&#xff09;金秋九月&#xff0c;瓜果飘香&#xff0c;油茶也将迎来采摘期。13日&#xff0c;一场以“中国健康油 茶油新势力”为主题的乳源茶油12221市场体系之产业大会暨供销对接会在广州举行。来自茶油行业的专家、企业家齐聚一堂&am…

Python模块之time中时间戳、时间字符与时间元组之间的相互转换

时间的三种形式 时间戳&#xff0c;根据1970年1月1日00:00:00开始按秒计算的偏移量。 1694868399 时间格式字符串&#xff0c;字符串形式的时间。 2023-09-16 20:46:39 时间元组&#xff08;struct_time&#xff09;&#xff0c;包含9个元素。 time.struct_time(tm_year2023, …

2023 IDC 中国未来企业大奖优秀奖公布,神策数据助力中信建投获“未来运营领军者”优秀奖称号...

今日&#xff0c;全球领先的 IT 市场研究和咨询公司 IDC 正式公布 2023 IDC 中国未来企业大奖优秀奖名单&#xff0c;神策数据的合作客户中信建投证券股份有限公司&#xff08;简称“中信建投”&#xff09;荣获“未来运营领军者”优秀奖称号。 该奖项是 ICT 领域最具权威的奖项…

直线导轨滑块的固定方式

直线导轨滑块是要安装到导轨上的&#xff0c;利用压力使得滑块固定到导轨上&#xff0c;并调整间隙精度&#xff0c;当机械中有振动或冲击力浸染时&#xff0c;滑块和滑轨很有可能发生松动&#xff0c;从而偏离原来的固定地位&#xff0c;影响运行精度与操作寿命&#xff0c;甚…