当前位置: 首页 > news >正文

# 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 中可以使用以下两个方法验证:

    1. 标识符 / 数据 后输入一个 .,然后按下 TAB 键,iPython 会提示该对象能够调用的 方法列表
    1. 使用内置函数 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
  • 定义两个方法 eatdrink
  • 按照需求 —— 不需要定义属性。

在这里插入图片描述

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()

提问:tomlazy_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 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 代码思路&#xff1a; 用暴力算法&#xff1a; class Solution {public boolean searchMatrix(…...

Python语法基础(四)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 高阶函数之map 高阶函数就是说&#xff0c;A函数作为B函数的参数&#xff0c;B函数就是高阶函数 map&#xff1a;映射 map(func,iterable) 这个是map的基本语法&#xff0c;…...

03_Django视图

三、Django模板 模板Templates 在Django框架中&#xff0c;模板是可以帮助开发者快速生成呈现给用户页面的工具 模板的设计方式实现了我们MVT中VT的解耦(M:Model&#xff0c;V:View&#xff0c;T:Template)&#xff0c;VT有着N:M的关系&#xff0c;一个V可以调用任意T&#xf…...

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件 在使用 Hugging Face 的数据集进行模型训练时&#xff0c;有时我们并不需要整个数据集&#xff0c;尤其是当数据集非常大时。为了节省存储空间和提高训练效率&#xff0c;我们可以从数据集中随机采样一部分数…...

11 设计模式之代理模式(送资料案例)

一、什么是代理模式&#xff1f; 在现实生活中&#xff0c;我们常常遇到这样的场景&#xff1a;由于某些原因&#xff0c;我们可能无法亲自完成某个任务&#xff0c;便会委托他人代为执行。在设计模式中&#xff0c;代理模式 就是用来解决这种“委托”问题的&#xff0…...

MongoDB聚合操作

1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档&#xff0c;可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类&#xff1a;单一作用聚合、聚合管道、MapReduce。 单一作用聚合&#xff1a;提供了对常见聚合过程的简单访问&#xff0c…...

第二十三周周报:High-fidelity Person-centric Subject-to-Image Synthesis

目录 摘要 Abstract TDM SDM SNF 测试时的人物细节捕捉 主要贡献 总结 摘要 本周阅读了一篇2024年CVPR的关于高保真度、以人物为中心的图像合成方法的论文&#xff1a;High-fidelity Person-centric Subject-to-Image Synthesis。该论文提出了一种名为Face-diffuser的…...

Cesium 与 Leaflet:地理信息可视化技术比较

在现代地理信息系统(GIS)和空间数据可视化领域,Cesium 和 Leaflet 是两种非常常见的地理可视化库,它们各自适用于不同的应用场景。Cesium 专注于三维地球视图和复杂空间分析,而 Leaflet 则注重轻量级的二维地图展示。本文将对这两种技术进行详细的对比,帮助开发者根据具体…...

Linux 服务器使用指南:诞生与演进以及版本(一)

一、引言 在当今信息技术的浪潮中&#xff0c;Linux 操作系统无疑是一个关键的支柱&#x1f60e;。无论是在服务器管理、软件开发还是大数据处理领域&#xff0c;Linux 都以其卓越的适应性和优势脱颖而出&#x1f44d;。然而&#xff0c;对于许多新手而言&#xff0c;Linux 系统…...

龙蜥 Linux 安装 JDK

龙蜥 Linux 安装 JDK 下载安装解压到目标路径设置环境变量直接在启动脚本中临时设置 参考资料 下载 这个就不赘述了&#xff0c;参考资料中的另外两篇安装帖&#xff0c;都有。 如果不能上网&#xff0c;也可以去内网其他之前装过JDK的服务器&#xff0c;直接复制过来。 tar …...

Python小白语法基础20(模块与包)

0) 参考文章 python的模块(module)、包(package)及pip_python package-CSDN博客Python之函数、模块、包库_python函数、模块和包-CSDN博客Python函数模块自定义封装及模块嵌套导入&#xff08;手把手教程&#xff09;_python如何封装一个模块-CSDN博客 1) 模块与包说明 软件…...

详解 Qt QtPDF之QPdfPageNavigator 页面跳转

文章目录 前言头文件&#xff1a; 自 Qt 6.4 起继承自&#xff1a; 属性backAvailable : const boolcurrentLocation : const QPointFcurrentPage : const intcurrentZoom : const qrealforwardAvailable : const bool 公共函数QPdfPageNavigator(QObject *parent)virtual ~QPd…...

通俗易懂:序列标注与命名实体识别(NER)概述及标注方法解析

目录 一、序列标注&#xff08;Sequence Tagging&#xff09;二、命名实体识别&#xff08;Named Entity Recognition&#xff0c;NER&#xff09;**命名实体识别的作用****命名实体识别的常见实体类别** &#xff1a; 三、标签类型四、序列标注的三种常见方法1. **BIO&#xf…...

【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现

代码主要实现了以下功能&#xff1a; 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode&#xff0c;包含节点数据值&#xff08;字符类型&#xff09;以及指向左右子树的指针。 定义了顺序栈结构体 SqStack&#xff0c;用于存储二叉树节点指针&#xff0c;实现非递归遍历…...

2024年11月文章一览

2024年11月编程人总共更新了21篇文章&#xff1a; 1.2024年10月文章一览 2.《使用Gin框架构建分布式应用》阅读笔记&#xff1a;p307-p392 3.《使用Gin框架构建分布式应用》阅读笔记&#xff1a;p393-p437 4.《使用Gin框架构建分布式应用》读后感 5.《Django 5 By Example…...

重生之我在异世界学编程之C语言:二维数组篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一 二维数组的创建1. 二维数组的…...

和鲸科技创始人CEO范向伟出席首届工业智算产业发展研讨会,共话 AI 创新与产业化落地

11 月 22 日&#xff0c;首届工业智算产业发展研讨会在中国工业互联网研究院召开。工业和信息化部党组成员、副部长单忠德&#xff0c;国家信息中心大数据发展部副主任魏颖出席会议并致辞。中国工程院院士、北京化工大学教授高金吉&#xff0c;工业和信息化部信息通信发展司二级…...

postgres数据备份与主从配置

备份PostgreSQL数据库 备份格式有几种选择&#xff1a; bak&#xff1a;压缩二进制格式 sql&#xff1a;明文转储 tar: tarball mydb# \q -bash-4.2$ pg pgawk pg_dump pgrep pg_basebackup pg_dumpall pg_restore# 备份所有的 -bash-4.2$ pg_dumpall &…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...