# 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类
01_Python基础到实战一飞冲天(三)–python面向对象(一)–简单类
一、面向对象-01-基本概念
1、面向对象(OOP)
面向对象编程 —— Object Oriented Programming
简写 OOP
。
2、面向对象(OOP) 学习目标
- 了解 面向对象 基本概念
3、面向对象和面向过程是两种不同的编程方式。
1)编程方式有 面向过程 和面向对象。
2)面相过程 和 面相对象,是两种不同的 编程方式。
3)对比 面向过程 的特点,可以更好地了解什么是 面向对象。
4、过程和函数(科普)
1)过程 是早期的一个编程概念。
2)过程 类似于函数,只能执行,但是没有返回值。
3)函数 不仅能执行,还可以返回结果。
5、 面相过程 和 面相对象 基本概念
5.1、 面向过程 —— 强调怎么做?
1)面向过程基本开发步骤:
- 把完成某一个需求的
所有步骤
从头到尾
逐步实现。 - 根据开发需求,将某些 功能独立 的代码 封装 成一个又一个 函数。
- 最后完成的代码,就是顺序地调用 不同的函数。
2)面向过程 编程特点
- 注重 步骤与过程,不注重职责分工。
- 如果需求复杂,代码会变得很复杂。
- 开发复杂项目,没有固定的套路,开发难度很大!
3)面向过程编程 示意图:
5.2、 面向对象 —— 侧重谁来做?
相比较函数,面向对象 是 更大 的 封装,根据 职责 在 一个对象中 封装 多个方法。
1)面向对象基本开发套路:
- 在完成某一个需求前,首先确定 职责 —— 要做的事情(方法)。
- 根据 职责 确定不同的 对象,在 对象 内部封装不同的 方法(多个)。
- 最后完成的代码,就是顺序地让 不同的对象 调用 不同的方法。
2)面向对象编程特点
- 注重 对象和职责,不同的对象承担不同的职责。
- 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路。
- 需要在面向过程基础上,再学习一些面向对象的语法。
3)面向对象示例:植物大战僵尸游戏
二、面向对象-02-类和对象基本概念
1、类和对象 学习目标
- 类和对象的概念
- 类和对象的关系
- 类的设计
2、类 和 对象 是 面向对象编程的 两个 核心概念。
3、类和对象的概念 :类
1)类 是对一群具有 相同 特征 或者 行为 的事物的一个统称,是抽象的,不能直接使用。
2)特征 被称为 属性。
3)行为 被称为 方法。
4)类 就相当于制造飞机时的图纸,是一个 模板,是 负责创建对象的。
4、类和对象的概念 :对象
1)对象 是 由类创建出来的一个具体存在,可以直接使用。
2)由 哪一个类 创建出来的 对象,就拥有在 哪一个类 中定义的:属性和方法。
3)对象 就相当于用 图纸 制造 的飞机。
在程序开发中,应该 先有类,再有对象
5、类和对象的关系
1)类是模板,对象 是根据 类 这个模板创建出来的,应该 先有类,再有对象。
2)类 只有一个,而 对象 可以有很多个。
3)不同的对象 之间 属性 可能会各不相同。
4)类 中定义了什么 属性和方法,对象 中就有什么属性和方法,不可能多,也不可能少。
三、面向对象-03-设计类的三要素和名词提炼法
1、类的设计
在使用面向对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!
2、在程序开发中,要设计一个类,通常需要满足一下三个要素:
1) 类名 这类事物的名字,满足大驼峰命名法。
2) 属性 这类事物具有什么样的特征。
3) 方法 这类事物具有什么样的行为。
3、大驼峰命名法
CapWords
1)每一个单词的首字母大写。
2)单词与单词之间没有下划线。
4、类名的确定:名词提炼法
名词提炼法 分析 整个业务流程,出现的 名词,通常就是找到的类。
5、属性和方法的确定
1)对 对象的特征描述,通常可以定义成 属性。
2)对象具有的行为(动词),通常可以定义成 方法。
提示:需求中没有涉及的属性或者方法在设计类时,不需要考虑
6、练习 1:需求
1)小明 今年 18 岁,身高 1.75,每天早上 跑 完步,会去 吃 东西。
2)小美 今年 17 岁,身高 1.65,小美不跑步,小美喜欢 吃 东西 。
7、练习 2:需求
1)一只 黄颜色 的 狗狗 叫 大黄。
2)看见生人 汪汪叫。
3)看见家人 摇尾巴。
四、面向对象-04-内置的dir函数查询对象的方法列表
1、面相对象基础语法 学习目标:
dir
内置函数- 定义简单的类(只包含方法)
- 方法中的
self
参数 - 初始化方法
- 内置方法和属性
2、 dir
内置函数(知道)
1)在 Python
中 对象几乎是无所不在的,我们之前学习的 变量、数据、函数 都是对象。
2)在 Python
中可以使用以下两个方法验证:
-
- 在 标识符 / 数据 后输入一个
.
,然后按下TAB
键,iPython
会提示该对象能够调用的 方法列表。
- 在 标识符 / 数据 后输入一个
-
- 使用内置函数
dir
传入 标识符 / 数据,可以查看对象内的 所有属性及方法。
- 使用内置函数
3、提示** __方法名__
格式的方法是 Python
提供的 内置方法 / 属性,如:
__new__
方法: 创建对象时,会被 自动 调用。
__init__
方法: 对象被初始化时,会被 自动 调用。
__del__
方法: 对象被从内存中销毁前,会被 自动 调用。
__str__
方法: 返回对象的描述信息,print
函数输出使用。
提示 利用好 dir()
函数,在学习时很多内容就不需要死记硬背了
4、示例:
五、定义简单类-01-基本语法
1、定义简单的类(只包含方法)
面向对象 是 更大 的 封装,在 一个类中 封装 多个方法,这样 通过这个类创建出来的对象,就可以直接调用这些方法了!
2、定义只包含方法的类
1)在 Python
中要定义一个只包含方法的类,语法格式如下:
class 类名:def 方法1(self, 参数列表):passdef 方法2(self, 参数列表):pass
2)方法 的定义格式和函数 几乎一样。
3)区别在于第一个参数必须是 self
。
4)注意:类名 的 命名规则 要符合 大驼峰命名法
3、创建对象
- 当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()
六、定义简单类-02-案例演练
1、第一个面向对象程序
1)需求
- 小猫 爱 吃 鱼,小猫 要 喝 水
2)分析
- 定义一个猫类
Cat
。 - 定义两个方法
eat
和drink
。 - 按照需求 —— 不需要定义属性。
2、第一个面向对象程序 示例 代码(dzs_01_第一个面向对象程序.py):
# dzs_01_第一个面向对象程序.pyclass Cat:"""这是一个猫类"""def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫在喝水")tom = Cat()
tom.drink()
tom.eat()
3、示例:
七、定义简单类-03-接收对象的变量同样是对对象的引用
1、引用概念的强调
在面向对象开发中,引用的概念是同样适用的!
1)在 Python
中使用类 创建对象之后,tom
变量中 仍然记录的是 对象在内存中的地址。
2)也就是 tom
变量 引用 了 新建的猫对象。
3)使用 print
输出 对象变量,默认情况下,是能够输出这个变量 引用的对象 是 由哪一个类创建的对象,以及 在内存中的地址(十六进制表示)。
2、提示:在计算机中,通常使用 十六进制 表示 内存地址。
- 十进制 和 十六进制 都是用来表达数字的,只是表示的方式不一样。
- 十进制 和 十六进制 的数字之间可以来回转换。
1) %d
可以以 10 进制 输出数字
2) %x
可以以 16 进制 输出数字。
3、第一个面向对象程序 示例 代码(dzs_01_第一个面向对象程序.py)添加内存地址输出。
# dzs_01_第一个面向对象程序.pyclass Cat:"""这是一个猫类"""def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫在喝水")tom = Cat()
tom.drink()
tom.eat()print(tom)
addr = id(tom)
print("%d" % addr)
print("%x" %addr)
4、示例:
八、定义简单类-04-创建多个猫对象
1、猫类案例进阶 —— 使用 Cat 类再创建一个对象
tom = Cat()
tom.eat()
Tom.drink()
lazy_cat = Cat()
lazy_cat.eat()
lazy_cat.drink()
提问:
tom
和lazy_cat
是同一个对象吗? 答案:不是。
2、猫类案例进阶:使用 Cat 类再创建一个对象 示例 代码(dzs_02_新建两个猫对象.py):
# dzs_02_新建两个猫对象.pyclass Cat:"""这是一个猫类"""def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫在喝水")tom = Cat()
tom.drink()
tom.eat()
print(tom)# 再创建一个猫对象
lazy_cat = Cat()
lazy_cat.eat()
lazy_cat.drink()
print(lazy_cat)lazy_cat2 = lazy_cat
print(lazy_cat2)
3、示例:
九、self-01-在类的外部给对象增加属性
1、给对象增加属性。
1)在 Python
中,要 给对象设置属性,非常的容易,但是不推荐使用
- 因为:对象属性的封装应该封装在类的内部。
2)只需要在 类的外部的代码 中直接通过 .
设置一个属性即可。
注意:这种方式虽然简单,但是不推荐使用!
tom.name = "Tom"
...lazy_cat.name = "大懒猫"
2、给对象增加属性 示例 代码(dzs_03_设置对象属性.py):
# dzs_03_设置对象属性.pyclass Cat:"""这是一个猫类"""def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫在喝水")tom = Cat()# 可以使用 .属性名 利用赋值语句就可以了
tom.name = "Tom"tom.drink()
tom.eat()
print(tom)# 再创建一个猫对象
lazy_cat = Cat()lazy_cat.name = "大懒猫"lazy_cat.eat()
lazy_cat.drink()
print(lazy_cat)lazy_cat2 = lazy_cat
print(lazy_cat2)
3、示例:
十、self-02-利用self在类封装的方法中输出对象属性
1、使用 self
在方法内部输出每一只猫的名字
由 哪一个对象 调用的方法,方法内的
self
就是 哪一个对象的引用。
1)在类封装的方法内部,self
就表示 当前调用方法的对象自己
2)调用方法时,程序员不需要传递 self
参数
3)在方法内部
* 可以通过 self.
访问对象的属性
* 也可以通过 self.
调用其他的对象方法
4)改造代码如下:
class Cat:def eat(self):print("%s 爱吃鱼" % self.name)tom = Cat()
tom.name = "Tom"
tom.eat()lazy_cat = Cat()
lazy_cat.name = "大懒猫"
lazy_cat.eat()
2、方法中的 self 示意图:
- 在 类的外部,通过
变量名.
访问对象的 属性和方法 - 在 类封装的方法中,通过
self.
访问对象的 属性和方法
3、dzs_03_设置对象属性.py 示例 代码
# dzs_03_设置对象属性.pyclass Cat:"""这是一个猫类"""def eat(self):# 由哪一个对象调用的方法,方法内的self就是哪一个对象的引用# print("小猫爱吃鱼")print("%s 爱吃鱼" % self.name)def drink(self):# print("小猫在喝水")print("%s 在喝水" % self.name)tom = Cat()# 可以使用 .属性名 利用赋值语句就可以了
tom.name = "Tom"tom.drink()
tom.eat()
print(tom)# 再创建一个猫对象
lazy_cat = Cat()lazy_cat.name = "大懒猫"lazy_cat.eat()
lazy_cat.drink()
print(lazy_cat)lazy_cat2 = lazy_cat
print(lazy_cat2)
4、示例:
上一节关联链接请点击:
26_Python基础到实战一飞冲天(二)-python基础(二十六)–缺省多值参数和递归
相关文章:
# 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类
01_Python基础到实战一飞冲天(三)–python面向对象(一)–简单类 一、面向对象-01-基本概念 1、面向对象(OOP) 面向对象编程 —— Object Oriented Programming 简写 OOP。 2、面向对象(OOP) 学习目标 了解 面向对象 基本概念…...
sentinel使用手册
1.引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>2.yaml spring:cloud:sentinel:transport:dashboard: localhost:8090 #sentinel控制台地址…...
搜索二维矩阵 II(java)
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 代码思路: 用暴力算法: class Solution {public boolean searchMatrix(…...
Python语法基础(四)
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 高阶函数之map 高阶函数就是说,A函数作为B函数的参数,B函数就是高阶函数 map:映射 map(func,iterable) 这个是map的基本语法,…...
03_Django视图
三、Django模板 模板Templates 在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具 模板的设计方式实现了我们MVT中VT的解耦(M:Model,V:View,T:Template),VT有着N:M的关系,一个V可以调用任意T…...
如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件
如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件 在使用 Hugging Face 的数据集进行模型训练时,有时我们并不需要整个数据集,尤其是当数据集非常大时。为了节省存储空间和提高训练效率,我们可以从数据集中随机采样一部分数…...
11 设计模式之代理模式(送资料案例)
一、什么是代理模式? 在现实生活中,我们常常遇到这样的场景:由于某些原因,我们可能无法亲自完成某个任务,便会委托他人代为执行。在设计模式中,代理模式 就是用来解决这种“委托”问题的࿰…...
MongoDB聚合操作
1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce。 单一作用聚合:提供了对常见聚合过程的简单访问,…...
第二十三周周报:High-fidelity Person-centric Subject-to-Image Synthesis
目录 摘要 Abstract TDM SDM SNF 测试时的人物细节捕捉 主要贡献 总结 摘要 本周阅读了一篇2024年CVPR的关于高保真度、以人物为中心的图像合成方法的论文:High-fidelity Person-centric Subject-to-Image Synthesis。该论文提出了一种名为Face-diffuser的…...
Cesium 与 Leaflet:地理信息可视化技术比较
在现代地理信息系统(GIS)和空间数据可视化领域,Cesium 和 Leaflet 是两种非常常见的地理可视化库,它们各自适用于不同的应用场景。Cesium 专注于三维地球视图和复杂空间分析,而 Leaflet 则注重轻量级的二维地图展示。本文将对这两种技术进行详细的对比,帮助开发者根据具体…...
Linux 服务器使用指南:诞生与演进以及版本(一)
一、引言 在当今信息技术的浪潮中,Linux 操作系统无疑是一个关键的支柱😎。无论是在服务器管理、软件开发还是大数据处理领域,Linux 都以其卓越的适应性和优势脱颖而出👍。然而,对于许多新手而言,Linux 系统…...
龙蜥 Linux 安装 JDK
龙蜥 Linux 安装 JDK 下载安装解压到目标路径设置环境变量直接在启动脚本中临时设置 参考资料 下载 这个就不赘述了,参考资料中的另外两篇安装帖,都有。 如果不能上网,也可以去内网其他之前装过JDK的服务器,直接复制过来。 tar …...
Python小白语法基础20(模块与包)
0) 参考文章 python的模块(module)、包(package)及pip_python package-CSDN博客Python之函数、模块、包库_python函数、模块和包-CSDN博客Python函数模块自定义封装及模块嵌套导入(手把手教程)_python如何封装一个模块-CSDN博客 1) 模块与包说明 软件…...
详解 Qt QtPDF之QPdfPageNavigator 页面跳转
文章目录 前言头文件: 自 Qt 6.4 起继承自: 属性backAvailable : const boolcurrentLocation : const QPointFcurrentPage : const intcurrentZoom : const qrealforwardAvailable : const bool 公共函数QPdfPageNavigator(QObject *parent)virtual ~QPd…...
通俗易懂:序列标注与命名实体识别(NER)概述及标注方法解析
目录 一、序列标注(Sequence Tagging)二、命名实体识别(Named Entity Recognition,NER)**命名实体识别的作用****命名实体识别的常见实体类别** : 三、标签类型四、序列标注的三种常见方法1. **BIO…...
【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现
代码主要实现了以下功能: 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode,包含节点数据值(字符类型)以及指向左右子树的指针。 定义了顺序栈结构体 SqStack,用于存储二叉树节点指针,实现非递归遍历…...
2024年11月文章一览
2024年11月编程人总共更新了21篇文章: 1.2024年10月文章一览 2.《使用Gin框架构建分布式应用》阅读笔记:p307-p392 3.《使用Gin框架构建分布式应用》阅读笔记:p393-p437 4.《使用Gin框架构建分布式应用》读后感 5.《Django 5 By Example…...
重生之我在异世界学编程之C语言:二维数组篇
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 二维数组的创建1. 二维数组的…...
和鲸科技创始人CEO范向伟出席首届工业智算产业发展研讨会,共话 AI 创新与产业化落地
11 月 22 日,首届工业智算产业发展研讨会在中国工业互联网研究院召开。工业和信息化部党组成员、副部长单忠德,国家信息中心大数据发展部副主任魏颖出席会议并致辞。中国工程院院士、北京化工大学教授高金吉,工业和信息化部信息通信发展司二级…...
postgres数据备份与主从配置
备份PostgreSQL数据库 备份格式有几种选择: bak:压缩二进制格式 sql:明文转储 tar: tarball mydb# \q -bash-4.2$ pg pgawk pg_dump pgrep pg_basebackup pg_dumpall pg_restore# 备份所有的 -bash-4.2$ pg_dumpall &…...
【二分查找】力扣 275. H 指数 II
一、题目 二、思路 h 指数是高引用引用次数,而 citations 数组中存储的就是不同论文被引用的次数,并且是按照升序排列的。也就是说 h 指数将整个 citations 数组分成了两部分,左半部分是不够引用 h 次 的论文,右半部分论文的引用…...
使用uni-app进行开发前准备
使用uni-app进行开发,需要遵循一定的步骤和流程。以下是一个详细的指南,帮助你开始使用uni-app进行开发: 一、开发环境搭建 安装Node.js: 首先,从Node.js的官方网站(https://nodejs.org/)下载并…...
AI开发-深度学习框架-PyTorch-torchnlp
1 需求 Welcome to Pytorch-NLP’s documentation! — PyTorch-NLP 0.5.0 documentation 2 接口 3 示例 4 参考资料...
VBA数据库解决方案第十七讲:Recordset对象记录位置的定位方法
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...
Ubuntu 操作系统
一、简介 Ubuntu 是一个基于 Linux 的开源操作系统,它由 Canonical Ltd. 公司维护和资助。Ubuntu 以其易用性、强大的社区支持和定期的安全更新而闻名,一个一桌面应用为主的操作系统。 二、用户使用 1、常规用户的登陆方式 在登录时一般使用普通用户&…...
Maven 内置绑定到底怎么回事?
Maven是一个很好的项目管理工具. 一方面有着众多脚手架,另一方面在依赖管理方面 帮助使用者做了很多准备工作. 随着Maven的使用和学习的深入,大家会不仅有一些问题。 比较浅显的一个就是, 日常我们的Maven 下载安装好以后,在IDE 里…...
如何把Qt exe文件发送给其他人使用
如何把Qt exe文件发送给其他人使用 1、先把 Debug改成Release2、重新构建项目3、运行项目4、找到release文件夹5、新建文件夹,存放exe文件6、打开qt控制台串口7、下载各种文件8、压缩,发送压缩包给别人 1、先把 Debug改成Release 2、重新构建项目 3、运行…...
【汇编语言】call 和 ret 指令(三) —— 深度解析汇编语言中的批量数据传递与寄存器冲突
文章目录 前言1. 批量数据的传递1.1 存在的问题1.2 如何解决这个问题1.3 示例演示1.3.1 问题说明1.3.2 程序实现 2. 寄存器冲突问题的引入2.1 问题引入2.2 分析与解决问题2.2.1 字符串定义方式2.2.2 分析子程序功能2.2.3 得到子程序代码 2.3 子程序的应用2.3.1 示例12.3.2 示例…...
定义函数合并字符串—超详细讲解
【问题描述】 编写一个函数void str_bin(char str1[ ], char str2[ ]), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重…...
实现 vue3 正整数输入框组件
1.实现代码 components/InputInteger.vue <!-- 正整数输入框 --> <template><el-input v-model"_value" input"onInput" maxlength"9" clearable /> </template><script lang"ts" setup> import { ref …...
wordpress广告位插件/肇庆seo排名
在创建SpringBoot项目时,勾选Spring Security依赖,会在Maven中导入Spring Security。org.springframework.boot spring-boot-starter-security这个依赖中有一个登陆拦截器,SpringBoot项目访问任意接口(页面)都跳转到login登录页面这是Spring…...
做网站企业 金坛/2023第三波疫情已经到来了
自定义Activity控件可以继承System.Workflow.ComponentModel.Activity写一个功能类控件,也可以继承System.Workflow.Activities.SequenceActivity,将现有的Activity拖入进行组装 具体的功能扩展、整合与在NET下自定定组件没什么本质区别,但要注意一下自定…...
天津 论坛网站制作公司/线上推广100种方式
注:本文图片来源(http://hosted.zeh.com.br/tweener/docs/en-us/misc/transitions.html。 侵权请告知,即刻删除) 什么是缓动, 缓动(easing) 是指动画效果在运行时被指定速度,使视感更加真实。 比較经典的&a…...
qq空间怎么做网站/网站建设公司seo关键词
1.定时器 2.websocket,可以被动的接受后台数据,用回调函数响应(http://www.runoob.com/html/html5-websocket.html)...
双语 网站 数据怎么做/vue seo 优化方案
写成宏,方便移植#define setbit(x,y) x|(1<//将X的第Y位置1#define clrbit(x,y) x&~(1<方法二:C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的…...
O2O网站制作需要多少钱/长沙百度搜索排名优化
题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:2021年危险化学品生产单位安全生产管理人员考试题为正在备考危险化学品生产单位安全生产管理人员操作证的学员准备的理论考试专题,每个月更新的危险化学品生产单位安全…...