# 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 &…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
