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࿰…...
自动控制: 最小二乘估计(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,-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…...
Spring如何管理Bean的生命周期呢?
我们都知道,在面试的过程中,关于 Spring 的面试题,那是各种各样,很多时候就会问到关于 Spring的相关问题,比如 AOP ,IOC 等等,还有就是关于 Spring 是如何管理 Bean 的生命周期的相关问题&#…...
Java网络编程:UDP通信篇
目录 UDP协议 Java中的UDP通信 DatagramSocket DatagramPacket UDP客户端-服务端代码实现 UDP协议 对于UDP协议,这里简单做一下介绍: 在TCP/IP协议簇中,用户数据报协议(UDP)是传输层的一个主要协议之一…...
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已经连接好,(下图中是没有连接ST-link设备),只是为了展示如何查看STlink设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须,但对立即看到新程序的现象…...
我和jetson-Nano的故事(12)——安装pytorch 以及 torchvision
在jetson nano中安装Anaconda、pytorch 以及 torchvision 1.Pytorch下载安装2.Torchvision安装 1.Pytorch下载安装 首先登录英伟达官网下载Pytorch安装包,这里以PyTorch v1.10.0为例 安装依赖库 sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev liba…...
「异步魔法:Python数据库交互的革命」(一)
Hi,我是阿佑,今天将和大家一块打开异步魔法的大门,进入Python异步编程的神秘领域,学习如何同时施展多个咒语而不需等待。了解asyncio的魔力,掌握Async SQLAlchemy和Tortoise-ORM的秘密,让你的数据库操作快如…...
探秘GPT-4o:从版本对比到技术能力的全面评价
随着人工智能技术的不断发展,自然语言处理领域的突破性技术——GPT(Generative Pre-trained Transformer)系列模型也在不断演进。最新一代的GPT-4o横空出世,引起了广泛的关注和讨论。在本文中,我们将对GPT-4o进行全面评…...
四川汇烁面试总结
自我介绍项目介绍、 目录 1.jdk和jre的区别? 2.一段代码的执行流程? 3.接口与抽象类的区别? 4.ArrayList与LinkList的区别? 5.对HashMap的理解? 6.常见的异常? 7.throw 和 throws 有什么区别? 8.…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
