Day-02面向对象

一、匿名函数

和函数的作用一致,都是进行代码逻辑的封装,

区别1 在定义时,匿名函数可以不指定函数的名字

区别2 匿名函数执行实现简单的计算

区别3 匿名函数会自动将计算的结果返回

  • 定义格式

lambda 参数1,参数2...:计算逻辑(参数的处理逻辑)
# 匿名函数的使用
# 加法计算功能
def add(a,b):data = a+breturn data
​
res = add(12,15)
print(res)
​
# 使用匿名函数实现
# 定义匿名函数时,需要指定一个变量接收
f = lambda a,b:a+b
​
# 使用变量调用匿名函数
print(type(f))
res2 = f(20,30)
print(res2)
  • 使用场景

    • 1-进行简单的数据计算

    • 2-匿名函数当成参数进行传递,实现对数据的处理

# 匿名函数成参数使用
rdd = [1,2,3,4,5,6]
​
def reduce(f): # f = lambda a,b:a+b# f参数  接收一个累加计算的函数计算的函数# 实现数据的遍历过程init = 0for i in rdd:# 遍历数据时进行数据的sum求和# 实际的pyspark开发中,sum求和的计算不在reduce中实现,由开发人员自己编写计算逻辑# init = init+iinit= f(init,i)return init
​
# 开发人员在调用reduce函数编写数据的累加计算逻辑
res= reduce(lambda a,b:a+b)
print(res)

二、面向对象介绍

2-1 面向对象和面向过程开发

程序开发时,有两种编程思想

面向过程

  • 侧重点是过程

  • 按照一定的顺序步骤完成对某一特定问题的处理

  • 如何将大象放入冰箱中?

    • 1-打开冰箱门

    • 2-将大象放入冰箱

    • 3-关上冰箱门

  • 如何将老虎放入冰箱中?

    • 1-打开冰箱门

    • 2-将老虎放入冰箱

    • 3-关上冰箱门

  • 如何将狮子关在笼子中?

    • 1-打开笼子门

    • 2-将狮子赶入笼子中

    • 3-关上笼子门

  • 面向过程需要针对某一类问题需要重复编写代码

面向对象

  • 侧重点在对象

  • 将一类问题进行归纳总结,按照一个统一标准处理同一类问题

  • 如何将一项物品放入一个空间内?

    • 物品是什么?和空间是什么?

      • 处理的数据

    • 处理方式(动作) 函数功能

      • 打开

      • 关闭

  • 将一类问题分析后的内容进行类的创建,归纳过程

    • 针对类进行创建对象,对象是什么有数据本身决定

      • 数据是大象,对象就是一个大象对象

      • 大象的处理方式可以通过函数实现


面向过程的开发 比较简单快捷,但是需要重复编写代码

面向对象的开发 开发较复杂,需要考虑一类问题的处理,可以重复利用代码,不需要针对每个问题重复写代码

2-2 面向对象开发的三大特性

  • 封装

    • 对问题的归纳总结,封装为一个类

  • 继承

    • 对已经封装的类进行继承,在原来类的基础上可以再次增加新的内容

    • 人类的操作

      • 性别,年龄,地址。。

      • 上班

      • 学习

      • 吃饭

    • 继承人类 原来的数据和行为都会被继承下来

      • 性别,年龄,地址,手机号,收入

      • 上班

      • 学习

      • 吃饭

      • 睡觉

      • 玩游戏

  • 多态

    • 同一个方法实现不同的操作

    • 吃饭

      • 吃炒饭

      • 吃炒面

      • 吃盖浇饭

面向对象的特性中,主要使用的是封装

继承和多态可以根据实际需求选择使用

三、类的构成

面向对象开发的流程

1-封装一个类

2-使用类创建一个对象

在封装一个类的时候需要指定

数据和行为(数据的处理方法)

数据可以通过变量进行定义,在类中不叫变量,称为属性

行为可以通过函数进行定义,在类中称为方法

  • 格式

    • 关键字 class

class 类名:属性name = '张三'方法def eat(self):def paly_game(self):
​
# 调用类创建对象
object = 类名()   # 当前对象就是张三
​
# 执行某个行为
object.eat()
​
object.paly_game()

本质 就是将变量和函数再次封装在一个类中

# 类的定义
# 原来类的定义方式
class Student:# 类属性name = Noneage = None
​# 方法def func(self):print('方法')# 处理属性数据print(self.name)print(self.age)
​
​
# 使用类创建对象
s_obj = Student()
# 使用对象对数据进行赋值
s_obj.name = '张三'
s_obj.age = 20
​
# 创建多个对象
s_obj2 = Student()
s_obj2.name = '李四'
s_obj2.age = 20
​
# 使用类的方法进行数据处理
s_obj.func()
​
s_obj2.func()

四、面向开发的基本使用

根据需求定义类

  • 关键字class

  • 属性

    • 变量

  • 方法

    • 函数

    • 默认函数中必须有个self参数

    • self(自己)代表当前对象

如何将一项物品放入一个空间内?

# 使用面向对象方式开发程序
​
class Loading:# 属性name = Nonecontainer = None
​# 方法def open_func(self):print(f'打开{self.container}')
​def load_func(self):print(f'把{self.name}放入{self.container}中')
​def close_func(self):print(f'关闭{self.container}')
​
​
l = Loading()
# 指定数据
l.name = '大象'
l.container = '冰箱'
# 执行数据处理方法
l.open_func()
l.load_func()
l.close_func()
​
# 如何把老虎关进笼子?
l2 = Loading()
l2.name='老虎'
l2.container='笼子'
# 执行数据处理方法
l2.open_func()
l2.load_func()
l2.close_func()
​
​

五、类中的属性

5-1 属性分类

  • 类属性

class 类名:# 类属性定义   name就是一个类属性name = None
  • 对象属性

    • 在方法中使用self定义的属性就是对象属性

class 类名:# 类属性定义   name就是一个类属性name = Nonedef func(self):# age是对象属性self.age = None
  • 两种属性的区别

    • 类属性 可以被类的对象获取值 也可以被类执行获取对应值

    • 对象属性 只能被类的对象获取值

# 类中属性使用区别
class A:# 类属性 name = '张三'
​def func(self):# 对象属性self.age = 20
​
​
​
# 使用类创建对象
a = A()
# 使用对象获取类属性值和对象属性值
print(a.name)
a.func() # 执行方法定义对象属性
print(a.age)
​
# 直接使用类名字获取属性值
​
print(A.name)
print(A.age)# 类名不能直接获取对象数据的值
​

5-2 属性值的获取

  • 类的外部获取

# 类的属性值获取
class A:# 类属性定义stu = {}
​# 在类的方法中操作属性数据def func(self):self.age = 20
​
​
# 使用类创建对象
a = A()
# 类的外部获取属性值
print(a.stu)
# 类的外部修改属性值
a.stu['name'] = '张三'
a.stu['gender'] = '男'
del a.stu['name']
# 再次获取属性
print(a.stu)
​
# 外部获取对象属性值
a.func()
print(a.age)
​
  • 类的内部获取

    • 使用self获取属性值进行操作

# 类的属性值获取
class A:# 类属性定义stu = {}
​# 在类的方法中操作属性数据def func(self):self.age = 20
​
​def func2(self):# 操作类属性self.stu['address'] = '北京'# 操作对象属性self.age = 25
​
​
​
# 使用类创建对象
a = A()
# 类的外部获取属性值
print(a.stu)
# 类的外部修改属性值
a.stu['name'] = '张三'
a.stu['gender'] = '男'
del a.stu['name']
# 再次获取属性
print(a.stu)# 外部获取对象属性值
a.func()
print(a.age)
​
print('--------------')
# 调用方法2在类的内部处理属性值
a.func2()
print(a.stu)
print(a.age)
​

六、self的说明

self代表当前对象本身,是一个对象

# self 的说明
class Student:name = Noneage = None
​def comment(self):"""自我介绍方法:return:"""# 使用self来确认当前对象是谁print(f'我叫{self.name},年龄{self.age}岁')print(self)
​
# 使用类创建对象
s1 = Student()
s1.name = '张三'
s1.age = 20
​
s2 = Student()
s2.name = '李四'
s2.age = 25
​
# 两个对象调用相同方法
s1.comment() # s1对象调用方法 那么方法中slef就是s1对象
s2.comment() # s2对象调用方法 那么方法中slef就是s2对象

七、类的方法

  • 魔法方法

    • 类中自带的方法

    • __init__()

      • 在创建类对象时会调用的方法

    • __str__()

      • 在对对象进行print输出时调用

    • __del__()

      • 在删除对象时会被调用

    • ......

  • 自定义方法

    • 用户自己编写的方法

# init魔法方法的使用
class A:
​# 魔法方法def __init__(self):print('创建对象调用')
​# 自定义方法def func(self):print('自定义方法,需要创建对象后,使用对象调用才会执行')
​
# 创建对象会调用init方法
a1 = A()
​
# 使用对象调用func方法
a1.func()

7-1 魔法方法使用

  • __init__()

    • 在进行类创建对象时会被调用执行

  • __str__()

    • 在对象进行print输出时会执行

  • __del__()

    • 删除对象时会被执行

# 类中的魔法方法
class A:# 类属性name = None
​# 使用魔法方法 格式是固定的# init 初始化方法 创建对象时会被自动执行def __init__(self):print('init被调用执行')
​
​def __del__(self):# 对象被销毁删除时会被自动执行print('del被调用执行')
​
​def __str__(self):# 当对象被print输出时,会将str中返回值进行输出return self.name
​
​
# 创建对象
a = A()
# 手动删除对象
# del a
# 输出对象
a.name = '张三'
# print时会自动调用str方法,获取返回值
print(a)
# 程序结束 对象会被自动删除
print('程序结束')
​

7-2 init魔法方法的传参

方法本质其实就是函数,可以将数据通过参数传递到方法内

  • 形参

    • 缺省参数

    • 不定长参数

  • 实参

    • 位置参数 按照形参的位置和个数传递数据

    • 关键字参数 形参名=值

  • init魔法方法,再创建对象时会调用方法

    • 可以在init方法中定义参数

    • 在实际开发中都是使用init方法在创建对象时传递参数数据

# init方法的传参
​
class A:# name = None
​# 可以使用init方法,在创建对象时给属性赋值# 通过init的参数赋值def __init__(self,name,age,gender='男'):# 定义对象属性self.name = nameself.age = ageself.gender = gender
​
# 使用类创建对象,在括号内传递init的参数数据
a = A('李四',20,'男')
# 在生成对象后才对属性赋值
# a.name = '张三'
​
# 直接获取属性值
print(a.name)
print(a.age)
print(a.gender)
​
a1 = A(name='王五',gender='男',age=22)
print(a1.name)
​

7-3 自定义方法

由开发自己定义代码实现逻辑

自定义方法的分类

  • 对象方法 默认自定方法就是对象方法

  • 类方法 使用语法声明是类方法

  • 静态方法 使用语法糖声明是静态方法


区别 能被谁调用

对象方法 只能被对象调用

类方法 可以被类名直接调用也可以被被对象调用

静态方法 可以被类名直接调用也可以被被对象调用

# 类中方法
​
class A:
​def func1(self):# 对象方法print('func1 对象方法被执行')
​
​# 类方法 @classmethod 声明该方法是类方法 python的语法糖@classmethoddef func2(self):print('func2 类方法被执行')
​# 静态方法@staticmethoddef func3():print('func3 静态方法被执行')
​
​
# 创建对象
a = A()
# 对象可以调用所有方法
a.func1()
a.func2()
a.func3()
​
# 使用类名直接调用
print('----------')
A.func2()
A.func3()

日常开发都是使用对象方法

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

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

相关文章

一文解决弹窗交互设计难题,轻松上手

弹窗交互的分类 我们每天所说的弹出窗口是一个非常笼统的概念。我们习惯性地称所有的对话框、浮层和提示条为弹出窗口。事实上,弹出窗口可以分为两种类型:模态弹出框和非模态弹出框。在 UI 在设计中,当它迫使用户与之交互时,我们…

【算法】【二叉树,DFS,哈希集合,分类讨论】力扣1110. 删点成林

1110. 删点成林 文章目录 【算法】力扣【二叉树,DFS,哈希集合,分类讨论】1110. 删点成林题目描述示例 1:示例 2: 输入输出示例解释思路解析核心思想算法步骤复杂度分析 代码实现总结 【算法】力扣【二叉树&#xff0c…

ElasticSearch - 删除已经设置的认证密码(7.x)

文章目录 Pre版本号 7.x操作步骤检查当前Elasticsearch安全配置停止Elasticsearch服务修改Elasticsearch配置文件删除密码重启Elasticsearch服务验证配置 小结 Pre Elasticsearch - Configuring security in Elasticsearch 开启用户名和密码访问 版本号 7.x ES7.x 操作步骤 …

马斯克xAI融资60亿美元,宣布打造世界第一超算中心,10万张H100GPU

昨天,埃隆马斯克的xAI初创公司宣布获得60亿美元的巨额融资,主要用于打造一台巨大的超级计算机,马斯克称之为“超级计算工厂”。 从创立OpenAI到如今的xAI,技术和算力的发展历经了几个时代,但似乎马斯克的吸金能力一直…

一文讲透redis实现分布式锁里面的坑

一.前提 相信大家在使用分布式锁的时候都会选择redis或者zookeeper来实现。今天我们来讲一讲使用Redis实现分布式锁里面的坑。大家要避免 二.错误案例 1.jedis.setnx方法和jedis.expire组合实现加锁 上代码: Long result jedis.setnx(lockKey, requestId);if (re…

高精度算法(加减乘除)

高精度算法 高精度加法高精度减法高精度乘法高精度除法 高精度加法 高精度加法&#xff1a;反向存数组里&#xff0c;人工模拟两数相加 #include <iostream> #include <string> #include <vector> using namespace std; string s1, s2; void add(vector<…

代码随想录算法训练营day21|530.二叉搜索树的最小绝对值差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

二叉搜索树的最小绝对值差 递归法 首先需考虑这是一个二叉搜索树&#xff0c;在中序遍历后的结果为从小到大的一个序列&#xff0c;寻找二叉搜索树的最小绝对值差&#xff0c;只需比较一个节点与之后的差值即可。在遍历的过程中&#xff0c;我们需要一个节点保存前节点…

短道速滑短视频:四川京之华锦信息技术公司

短道速滑短视频&#xff1a;冰雪激情的视觉盛宴 随着冬奥会的热度不断攀升&#xff0c;短道速滑作为其中一项紧张刺激、充满观赏性的运动&#xff0c;受到了越来越多人的关注。而在社交媒体和短视频平台的助力下&#xff0c;短道速滑短视频成为了人们了解、欣赏这项运动的新窗…

vxe-form-design 表单设计器的使用

vxe-form-design 在 vue3 中表单设计器的使用 查看官网 https://vxeui.com 安装 npm install vxe-pc-ui // ... import VxeUI from vxe-pc-ui import vxe-pc-ui/lib/style.css // ...// ... createApp(App).use(VxeUI).mount(#app) // ...使用 github vxe-form-design 用…

Python在忘mysql密码后该如何重新连mysql

步骤一 先到mysql的bin目录下 步骤二 用mysqld delete mysql 把之前的库删了 步骤三 通过管理员模式进去后 用命令mysqld --skip-grant-tables越过验证 再输入mysql -u root 直达账户 步骤四 用FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY new_password; 指…

汽车热管理:新能源汽车发展的关键技术

在全球气候变化和能源危机的背景下,新能源汽车作为一种可持续的交通方式,正逐渐成为汽车行业的发展趋势。然而,新能源汽车的发展也面临着一些挑战,其中之一就是热管理问题。汽车热管理系统的设计和优化,对于提高新能源汽车的性能、延长电池寿命、提高能源效率以及确保乘客…

关于实践中生产调度技术落地应用时的挑战

文章目录 1. 问题背景2. 实践中常见的调度技术2.1 基于优先级调度规则2.2 基于搜索的排程技术2.3 基于瓶颈调度的方法2.4 基于知识的排程方法3. 调度技术落地时的挑战及建议3.1 存在不确定的干扰因素3.2 调度方案的生成方法与实际生产结构不匹配3.3 依据严苛时间表派工的压力3.…

Echarts x轴坐标二级分组

在使用echarts 封装组件的时候&#xff0c;偶尔会遇到需要x轴坐标进行二层分组的需求。那么如何对echarts 进行二层分组呢&#xff0c;有以下几个步骤&#xff1a; 仅介绍二层分组的逻辑。有兴趣的可以进行三层延伸。 1&#xff0c;修改echarts Options 中xAxis 的配置。 此…

交换排序、归并排序、计数排序

冒泡排序&#xff1a; void BubbleSort(int* a, int n) {//第一层循环是趟数&#xff0c;第二层是交换for (int i 0; i < n-2; i){int flag 0;for (int j 0; j < n - 2 - i; j){if (a[j] > a[j 1]){swap(&a[j], &a[j 1]);flag 1;}}if (flag 0){break;…

【机器学习】K-近邻算法(KNN)全面解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 K-近邻算法&#xff08;KNN&#xff09;全面解析概述1. 基本概念与原理1.1 KNN算…

Excel表格保护密码遗忘怎么办?三秒钟破解密码,轻松解锁!

在我们的日常工作中&#xff0c;Excel表格是一个非常实用的工具&#xff0c;但在某些情况下&#xff0c;我们可能会遇到密码忘记的问题&#xff0c;或者在尝试打开或删除文件时被锁定。别担心&#xff0c;这里有三个简单的解决方法来帮助您解决问题。 一、尝试默认密码或常见密…

使用 Orange Pi AIpro开发板基于 YOLOv8 进行USB 摄像头实时目标检测

文章大纲 简介算力指标与概念香橙派 AIpro NPU 纸面算力直观了解 手把手教你开机与基本配置开机存储挂载设置风扇设置 使用 Orange Pi AIpro进行YOLOv8 目标检测Pytorch pt 格式直接推理NCNN 格式推理 是否可以使用Orange Pi AIpro 的 NPU 进行推理 呢&#xff1f;模型开发流程…

gitlab push 代码,密码正确,仍然提示HTTP Basic: Access denied. The provided password

HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password gitlab 登录账户密码确认正确&#xff0c;登录获取代码仍然提示以上问题&#xff0c;解决方案 …

①单细胞学习-数据读取、降维和分群

目录 ①数据读取 ②计算线粒体基因比例 ③分开进行质控 ④两组单细胞数据合并 ⑤细胞周期评分 ⑥降维标准流程 降维 UMAP可视化 选择分群 ⑦marker基因 分析marker基因 marker基因可视化 ⑧细胞定群命名 单细胞的数据格式学习&#xff1a;单细胞 10X 和seurat对象…

SpringBoot项目文件上传校验(注解版)

需求 要实现了一个文件上传和验证的功能&#xff0c;具有以下特点&#xff1a; 1. 自定义注解&#xff1a;FileValidation注解用于标记需要进行文件验证的方法。 2. 文件验证拦截器&#xff1a;FileValidationInterceptor拦截器会在每个请求处理之前被调用。如果请求处理的方…