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

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

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

相关文章:

Day-02面向对象

一、匿名函数 和函数的作用一致,都是进行代码逻辑的封装, 区别1 在定义时,匿名函数可以不指定函数的名字 区别2 匿名函数执行实现简单的计算 区别3 匿名函数会自动将计算的结果返回 定义格式 lambda 参数1,参数2...:计算逻辑(参数的处理逻辑…...

Sentinel-2 哨兵二号数据介绍及下载

1 Sentinel-2简介 SENTINEL-2 is a European wide-swath, high-resolution, multi-spectral imaging mission. Sentinel-2 是高分辨率多光谱成像卫星,一颗卫星的重访周期为10天,两颗互补,重访周期为5天。分为2A和2B两颗卫星。2A于2015年6月…...

阿里智能信息数据挖掘复盘

(嘻嘻——不嘻嘻) 挫败呜呜呜,钉钉忘装,还要手机登录,迟到三分钟。 一上来就问项目,没有自我介绍。 第一篇的重要特征是什么直接忘记,正负样本比,过拟合的判断标准,特…...

Flutter中图片是怎么在flutter上呈现出来的?

在Flutter中,图片的呈现是通过使用Image组件来实现的。Image组件是一个用于加载和显示图片的Widget,可以从本地文件、网络URL或内存中加载图片,并在应用界面上进行渲染。 图片在Flutter中的呈现过程如下: 加载图片: 使…...

使用 CNN 训练自己的数据集

CNN(练习数据集) 1.导包:2.导入数据集:3. 使用image_dataset_from_directory()将数据加载tf.data.Dataset中:4. 查看数据集中的一部分图像,以及它们对应的标签:5.迭代数据集 train_ds&#xff0…...

自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计

自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计 在数据分析和机器学习中,参数估计是一个关键步骤。最小二乘估计(LSE)、加权最小二乘估计(WLS&…...

基于VMware安装Linux虚拟机

1.准备Linux环境 首先,我们要准备一个Linux的系统,成本最低的方式就是在本地安装一台虚拟机。为了统一学习环境,不管是使用MacOS还是Windows系统的同学,都建议安装一台虚拟机。 windows采用VMware,Mac则采用Fusion …...

6、phpjm混淆解密和php反序列化

题目:青少年雏形系统 1、打开链接也是一个登入面板 2、尝试了sqlmap没头绪 3、尝试御剑,发现一个www.zip 4、下载打开,有一个php文件打开有一段phpjm混淆加密 5、使用手工解混淆 具体解法链接:奇安信攻防社区-phpjm混淆解密浅谈…...

Codeforces Round 909 (Div. 3) E. Queue Sort(模拟 + 贪心之找到了一个边界点)

弗拉德找到了一个由 n 个整数组成的数组 a ,并决定按不递减的顺序排序。 为此,弗拉德可以多次执行下面的操作: 提取数组的第一个元素并将其插入末尾; 将个元素与前一个元素对调,直到它变成第一个元素或严格大于前一个…...

设计模式基础——设计原则介绍

1.概述 ​ 对于面向对象软件系统的设计而言,如何同时提高一个软件系统的可维护性、可复用性、可拓展性是面向对象设计需要解决的核心问题之一。面向对象设计原则应运而生,这些原则你会在设计模式中找到它们的影子,也是设计模式的基础。往往判…...

【校园网网络维修】当前用户使用的IP与设备重定向地址中IP不一致,请重新认证

出现的网络问题:当前用户使用的IP与设备重定向地址中IP不一致,请重新认证 可能的原因: 把之前登录的网页收藏到浏览器,然后直接通过这个链接进行登录认证。可能是收藏网址导致的ip地址请求参数不一致。 解决方法: 方法…...

如何找到docker的run(启动命令)

使用python三方库进行 需要安装python解释器 安装runlike安装包 pip3 install runlike 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id&#xff0c;-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…...

Spring如何管理Bean的生命周期呢?

我们都知道&#xff0c;在面试的过程中&#xff0c;关于 Spring 的面试题&#xff0c;那是各种各样&#xff0c;很多时候就会问到关于 Spring的相关问题&#xff0c;比如 AOP &#xff0c;IOC 等等&#xff0c;还有就是关于 Spring 是如何管理 Bean 的生命周期的相关问题&#…...

Java网络编程:UDP通信篇

目录 UDP协议 Java中的UDP通信 DatagramSocket DatagramPacket UDP客户端-服务端代码实现 UDP协议 对于UDP协议&#xff0c;这里简单做一下介绍&#xff1a; 在TCP/IP协议簇中&#xff0c;用户数据报协议&#xff08;UDP&#xff09;是传输层的一个主要协议之一&#xf…...

HTML+CSS+JS简易计算器

HTMLCSSJS简易计算器 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简易计算器</t…...

STM32使用ST-LINK下载程序中需要注意的几点

使用keil5的ST-link下载界面 前提是ST-LINK已经连接好&#xff0c;&#xff08;下图中是没有连接ST-link设备&#xff09;&#xff0c;只是为了展示如何查看STlink设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须&#xff0c;但对立即看到新程序的现象…...

我和jetson-Nano的故事(12)——安装pytorch 以及 torchvision

在jetson nano中安装Anaconda、pytorch 以及 torchvision 1.Pytorch下载安装2.Torchvision安装 1.Pytorch下载安装 首先登录英伟达官网下载Pytorch安装包&#xff0c;这里以PyTorch v1.10.0为例 安装依赖库 sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev liba…...

「异步魔法:Python数据库交互的革命」(一)

Hi&#xff0c;我是阿佑&#xff0c;今天将和大家一块打开异步魔法的大门&#xff0c;进入Python异步编程的神秘领域&#xff0c;学习如何同时施展多个咒语而不需等待。了解asyncio的魔力&#xff0c;掌握Async SQLAlchemy和Tortoise-ORM的秘密&#xff0c;让你的数据库操作快如…...

探秘GPT-4o:从版本对比到技术能力的全面评价

随着人工智能技术的不断发展&#xff0c;自然语言处理领域的突破性技术——GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型也在不断演进。最新一代的GPT-4o横空出世&#xff0c;引起了广泛的关注和讨论。在本文中&#xff0c;我们将对GPT-4o进行全面评…...

四川汇烁面试总结

自我介绍项目介绍、 目录 1.jdk和jre的区别&#xff1f; 2.一段代码的执行流程&#xff1f; 3.接口与抽象类的区别&#xff1f; 4.ArrayList与LinkList的区别&#xff1f; 5.对HashMap的理解? 6.常见的异常&#xff1f; 7.throw 和 throws 有什么区别&#xff1f; 8.…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...