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

面向对象(进阶)(‘封装‘,‘多态‘,‘对象属性‘,‘类属性‘,‘类方法‘,‘对象方法‘及其应用场景)

‘封装’,'多态’及其应用场景

一, 封装及其应用场景

封装的定义

属于面向对象的三大特征之一, 就是隐藏对象的属性和现实细节, 仅对外提供公共的访问方式.(我们学的 函数, 类, 都是封装的体现).

封装的格式

__属性名
__属性名()

封装的好处和弊端

好处
  • 提高代码的安全性. 由 私有化 来保证
  • 提高代码的的复用性. 由 函数 来保证
弊端
  • 代码量增加了. 因为私有的内容外界想访问, 必须提供公共的访问方式, 代码量就增加了.

封装的案例

案例需求
  1. 定义师傅类Master.
  2. 师傅类属性.
  3. 师傅类行为.
  4. 定义学校类School.
  5. 学校类属性.
  6. 学校类行为.
  7. 定义徒弟类(包含私房钱).
  8. 徒弟类属性.
  9. 徒弟类行为.
  10. 针对私有的属性, 提供公共的访问方式 (包含’获取’和’设置’).
  11. 定义徒孙类.
  12. 创建徒孙类对象.
  13. 调用功能.
# 1. 定义师傅类.
class Master:# 2. 师傅类属性.def __init__(self):self.kongfu = '[古法煎饼果子配方]'# 3. 师傅类行为.def make_cake(self):print(f'运用{self.kongfu} 制作煎饼果子')# 4. 定义学校类.
class Student:# 5. 学校类属性.def __init__(self):self.kongfu = '[黑马AI煎饼果子配方]'# 6. 学校类行为.def make_cake(self):print(f'运用{self.kongfu} 制作煎饼果子')# 7. 定义徒弟类(包含私房钱).
class Prentice:# 8. 徒弟类属性.def __init__(self):self.kongfu = '[独创煎饼果子配方]'# 私房钱.self.__money = 20000# 9. 徒弟类行为.def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')# 10. 针对私有的属性, 提供公共的访问方式.def get_money(self):			# 获取	return self.__moneydef set_money(self, money):		# 设置self.__money = money		# 11. 定义徒孙类.
class TuSun(Prentice):pass# 12. 创建徒孙类对象.
ts = TuSun()
# 13. 调用功能.
perint(ts.kongfu)
ts.make_cake()
# print(ts.__money)		# 报错, 父类私有成员, 子类无法访问.
ts.set_money(100)
print(ts.get_money())	# 通过父类提供的公共的访问方式, 访问父类的私有成员.

二, 多态及其应用案例

多态的定义

同一个函数, 接收不同的参数, 有不同的效果.
同一个事物在不同时刻表现出来的不同状态, 形态

多态的前提条件

    1. 要有继承.
    1. 要有方法重写, 不然多态无意义.
    1. 要有父类引用指向子类对象.

案例:

案例(1):动物案例
案例需求

动物类案例

实现思路
  1. 定义动物类(抽象类(也叫:接口)在其内定义抽象方法).
  2. 定义子类, 狗类.
  3. 定义子类, 猫类.
  4. 汽车类.
  5. 定义函数, 接收不同的动物对象, 调用speak方法.
  6. 创建狗类, 猫类对象.
  7. 演示多态.
  8. 测试汽车类
# 1. 定义动物类(抽象类(也叫:接口)在其内定义抽象方法).
class Animal:			# 抽象类(也叫: 接口)def speak(self):	# 抽象方法pass# 2. 定义子类, 狗类.
class Dog(Animal):def speak(self):print('狗叫: 汪汪汪')# 3. 定义子类, 猫类.
class Cat(Animal):def speak(self):print('猫叫: 喵喵喵')# 4. 定义汽车类.
class Car:def speak(self):print('车叫: 滴滴滴')# 5. 定义函数, 接收不同的动物对象, 调用speak方法
def make_noise(an:Animal):		# an:Animal = Dog()an.speak()# an:Animal = Dog()			# 父类引用指向子类对象(标准用法).
# d:Dog = Dog()				# 创建狗类对象.	
# 6. 创建狗类, 猫类对象.
d = Dog()
c = Cat()
# 7. 演示多态. 		
make_noise(d)
make_noise(c)# 8. 测试汽车类
c = Car()
make_noise(c)	
案例(2): 构建战斗平台
案例需求
  1. 构建对战平台(公共的函数) object_play(), 接收: 英雄机 和 敌机.
  2. 在不修改对战平台代码的情况下, 完成多次战斗.
  3. 规则:
    • 英雄机, 1代战斗力60, 2代战斗力80
    • 敌机, 1代战斗力70
  4. 代码提示:
    • 英雄机1代 HeroFighter
    • 英雄机2代 AdvHeroFighter
    • 敌机 EnemyFighter
实现思路
  1. 定义英雄机1代, 战斗力 60
  2. 定义英雄机2代, 战斗力 80
  3. 敌机1代
  4. 构建对战平台, 公共的函数, 接收不同的参数, 有不同的效果 -> 多态.
  5. 思路1: 不使用多态, 完成对战
  6. 场景1: 英雄机1代 VS 敌机1代
  7. 场景2: 英雄机2代 VS 敌机1代
  8. 思路2: 使用多态, 完成对战
  9. 场景1: 英雄机1代 VS 敌机1代
  10. 场景2: 英雄机2代 VS 敌机1代
# 1. 定义英雄机1代, 战斗力 60
class HeroFighter:def power(self):return 60# 2. 定义英雄机2代, 战斗力 80
class AdvHeroFighter(HeroFighter):def power(self):return 80# 3. 敌机1代
class EnemyFighter:def power(self):return 70# 4. 构建对战平台, 公共的函数, 接收不同的参数, 有不同的效果 -> 多态.
def object_play(hero, enemy):# 参1: 英雄机, 参2: 敌机if hero.power() >= enemy.power():print('英雄机 战胜 敌机!')else:print('英雄机 惜败 敌机!')# 思路1: 不使用多态, 完成对战.
# 场景1: 英雄机1代 VS 敌机1代
h1 = HeroFighter()
e1 = EnemyFighter()
if h1.power() >= e1.power():print('英雄机1代 战胜 敌机1代')
else:print('英雄机1代 惜败 敌机1代')
# 场景2: 英雄机2代 VS 敌机1代
h2 = AdvHeroFighter()
e1 = EnemyFighter()
if h2.power() >= e1.power():print('英雄机2代 战胜 敌机1代')
else:print('英雄机2代 惜败 敌机1代')# 思路2: 使用多态, 完成对战.
h1 = HeroFighter()
h2 = AdvHeroFighter()
e1 = EnemyFighter()
# 场景1: 英雄机1代 vs 敌机1代
object_play(h1, e1)
# 场景2: 英雄机2代 VS 敌机1代
object_play(h2,e1)
案例(3): 空调案例
抽象类的定义
  • 概述:
    • 在Python中, 抽象类 = 接口, 即 : 有抽象方法的类就是 抽象类, 也叫 接口.
  • 抽象方法 = 没有方法体的方法, 即: 方法体是 pass 修饰的.
  • 作用/目的:
    • 抽象类一般充当父类, 用于指定行业规范, 准则, 具体的实现交由 子类 来完成.
案例需求
实现思路
  1. 定义抽象类, 空调类, 设定: 空调的规则.
  2. 制冷.
  3. 制热.
  4. 左右摆风.
  5. 定义子类(小米空调), 实现父类(空调类)中的所有抽象方法.
  6. 制冷.
  7. 制热.
  8. 左右摆风.
  9. 定义子类(格力空调), 实现父类(空调类)中的所有抽象方法.
  10. 制冷.
  11. 制热.
  12. 左右摆风.
  13. 小米空调.
  14. 格力空调.
# 1. 定义抽象类, 空调类, 设定: 空调的规则.
class AC:# 2. 制冷.def cool_wind(self):pass# 3. 制热.def hot_wind(self):pass# 4. 左右摆风def swing_l_r(self):pass
# 5. 定义子类(小米空调), 实现父类(空调类)中的所有抽象方法.
class XiaoMi(AC):# 6. 制冷.def cool_wind(self):print('小米 核心 制冷技术!')# 7. 制热.def hot_wind(self):print('小米 核心 制热技术!')# 8. 左右摆风.def swing_l_r(self):print('小米空调 静音左右摆风 计数!')# 9. 定义子类(格力空调), 实现父类(空调类)中的所有抽象方法.
class Gree(AC):# 10. 制冷.def cool_wind(self):print('格力 核心 制冷技术!')# 11. 制热.def hot_wind(self):print('格力 核心 制热技术!')# 12. 左右摆风.def swing_l_r(self):print('格力空调 低频左右摆风 技术!')# 16. 小米空调.
xm = XiaoMi()
xm.cool_wind()
xm.hot_wind()
xm.swing_l_r()# 17. 格力空调.
gree = Gree()
gree.cool_wind()
gree.hot_wind()
gree.swing_l_r()

‘对象属性’, ‘;类属性’, ‘类方法’, '静态方法’及其应用场景

三, '对象属性’和’类属性’及其应用场景

图解

在这里插入图片描述

属性的定义

概述:

属性是1个名词, 用来描述事物的外在特征的.

分类:
  • 对象属性: 属于每个对象, 即: 每个对象的属性值可能都不同. 修改A对象的属性, 不影响对象B.
  • 类属性: 属于类的, 即: 能被该类下所有的对象所共享. A对象修改类属性, B对象访问的是修改后的.
对象属性
  1. 定义到 init 魔法方法中的属性, 每个对象都有自己的内容.
  2. 只能通过 对象名. 的方式调用.
类属性
  1. 定义到类中, 函数外的属性(变量), 能被该类下所有的对象所共享.
  2. 既能通过 类名. 还能通过 对象名. 的方式来调用, 推荐使用 类名. 的方式.

案例

案例需求

定义对象属性和类属性

实现思路
  1. 定义1个 Student类, 每个学生都有自己的 姓名, 年龄.
  2. 定义类属性.
  3. 定义对象属性, 即: 写到 init 魔法放法中的属性.
  4. 定义str魔法方法, 输出对象的信息.
  5. 场景1: 对象属性.
  6. 修改s1的属性值.
  7. 场景2: 类属性.
  8. 类属性可以通过 类名. 还可以通过 对象名. 的方式调用.
  9. 尝试用 对象名. 的方式来修改 类属性.
    10.如果要修改类变量的值, 只能通过 类名. 的方式来实现.
# 1. 定义1个 Student类, 每个学生都有自己的 姓名, 年龄.
class Student:# 2. 定义类属性.teacher_name = '水镜先生'# 3. 定义对象属性, 即: 写到 init 魔法方法中的属性.def __init__(self, name, age):self.name = nameself.age = age# 4. 定义str魔法方法, 输出对象的信息.def __str__(self):return '姓名: %s, 年龄: %d' % (self.name, self.age)
# 5. 场景1: 对象属性
s1 = Student('曹操', 38)
s2 = Student('曹操', 38)# 6. 修改s1的属性值.
s1.name = '许褚'
s1.age = 40print(f's1: {s1}')
print(f's2: {s2}')# 7. 场景2: 类属性.
# 8. 类属性可以通过 类名.	还可以通过 对象名. 的方式调用.
print(s1.teacher_name)			# 水镜先生
print(s2.teacher_name)			# 水镜先生
print(Student.teacher_name)			# 水镜先生# 9. 尝试用 对象名. 的方式来修改 类属性.
# s1.teacher_name = '夯哥'		# 只能给s1对象赋值, 不能给属性赋值.# 10. 如果要修改类变量的值, 只能通过	类名. 的方式实现.
Student.teacher_name = '夯哥'
print(s1.teacher_name)				# 夯哥
print(s2.teacher_name)				# 夯哥
print(Student.teacher_name)				# 夯哥

四, '类方法’和’静态方法’及其应用场景

类方法定义:

  • 属于类的方法, 可以通过 类名. 还可以通过 对象名. 的方式来调用.
  • 定义类方法的时候, 必须使用装饰器 @classmethod , 且第1个参数必须表示 类对象.

静态方法定义:

  • 属于该类下所有对象所共享的方法, 可以通过 类名. 还可以通过 对象名. 的方式来调用.
  • 定义静态方法的时候吗必须使用装饰器 @staticmetgod , 且参数传不传都可以.

区别:

  1. 类方法的第1个参数必须是 类对象, 而静态方法无参数的特殊要求.
  2. 你可以理解为: 如果函数中要用 类对象, 就定义成 类方法, 否则定义成 静态方法, 除此外, 并无任何区别.

案例:

案例需求

定义类方法和静态方法, 并调用

实现思路
  1. 定义学生类.
  2. 定义类属性.
  3. 定义类方法.
  4. 定义静态方法.
  5. 创建学生类对象.
  6. 调用功能.
# 1. 定义学生类.
class Student:# 2. 定义属性类.school = '黑马程序员'# 3. 定义类方法.@classmethoddef show1(cls):print(f'cls: {cls}')			# <class '__main__.Student'>print(cls.school)print('我是类方法')# 4. 定义静态方法.@staticmetheddef show2():print(Student.scxhool)print('我是静态方法')# 5. 创建学生类对象.
s1 = Student()
s1.show1()
s1.show2()

五, 总结

  • Q1: 封装的定义?

    • 属于面向对象的三大特征之一, 就是隐藏对象的属性和现实细节, 仅对外提供公共的访问方式.(我们学的 函数, 类, 都是封装的体现).
  • Q2: 多态的定义?

    • 同一个函数, 接收不同的参数, 有不同的效果.
    • 同一个事物在不同时刻表现出来的不同状态, 形态
  • Q3: 对象属性的定义?

    • 定义到 init 魔法方法中的属性, 每个对象都有自己的内容.
    • 只能通过 对象名. 的方式调用.
  • Q4: 类属性的定义?

    • 定义到类中, 函数外的属性(变量), 能被该类下所有的对象所共享.
    • 既能通过 类名. 还能通过 对象名. 的方式来调用, 推荐使用 类名. 的方式.
  • Q5: 类方法的定义?

    • 属于类的方法, 可以通过 类名. 还可以通过 对象名. 的方式来调用.
    • 定义类方法的时候, 必须使用装饰器 @classmethod , 且第1个参数必须表示 类对象.
  • Q6: 静态方法的定义?

    • 属于该类下所有对象所共享的方法, 可以通过 类名. 还可以通过 对象名. 的方式来调用.
    • 定义静态方法的时候吗必须使用装饰器 @staticmetgod , 且参数传不传都可以.

相关文章:

面向对象(进阶)(‘封装‘,‘多态‘,‘对象属性‘,‘类属性‘,‘类方法‘,‘对象方法‘及其应用场景)

‘封装’,多态’及其应用场景 一, 封装及其应用场景 封装的定义 属于面向对象的三大特征之一, 就是隐藏对象的属性和现实细节, 仅对外提供公共的访问方式.(我们学的 函数, 类, 都是封装的体现). 封装的格式 __属性名 __属性名()封装的好处和弊端 好处 提高代码的安全性.…...

django如何配置使用asgi

以下是 Django 配置使用 ASGI 的完整指南&#xff1a; 一、配置前提 Django 版本&#xff1a;确保使用 Django 3.0&#xff08;原生支持 ASGI&#xff09;必要依赖&#xff1a;pip install daphne channels二、基础配置步骤 1. 创建/修改 ASGI 入口文件 在 Django 项目根目录…...

MongoDB 只能存储能够序列化的数据(比如字符串、数字等),而 Python 的 UUID 对象并不是直接可以存入数据库的格式。

1. UUID 对象是什么&#xff1f; UUID 是 “Universally Unique Identifier”&#xff08;通用唯一识别码&#xff09;的缩写&#xff0c;是一种 128 位的数字&#xff0c;用于在全局范围内生成一个唯一的标识符。它常用于数据库中的记录标识、分布式系统中的对象标识等场景。…...

分页优化之——游标分页

游标分页&#xff08;Cursor-based Pagination&#xff09; 是一种高效的分页方式&#xff0c;特别适用于大数据集和无限滚动的场景。与传统的基于页码的分页&#xff08;如 page1&size10&#xff09;不同&#xff0c;游标分页通过一个唯一的游标&#xff08;通常是时间戳或…...

算法模型从入门到起飞系列——广度优先遍历(BFS)

文章目录 前言一、广度优先遍历&#xff08;BFS&#xff09;简介1.1 广度优先遍历&#xff08;BFS&#xff09;的特点1.2 广度优先遍历&#xff08;BFS&#xff09;的要素 二、广度优先遍历&#xff08;BFS&#xff09;& 深度优先遍历&#xff08;DFS&#xff09;2.1 广度优…...

AsyncHttpClient使用说明书

[[toc]] AsyncHttpClient(AHC)是一个高性能、异步的 HTTP 客户端库,广泛用于 Java 和 Scala 应用中,特别适合处理高并发、非阻塞的 HTTP 请求。它基于 Netty 或 Java 原生的异步 HTTP 客户端实现,支持 HTTP/1.1 和 HTTP/2 协议,适用于微服务、API 调用、爬虫等场景。 1.…...

FRP在远程办公中的实战应用

远程办公场景中&#xff0c;FRP可穿透企业防火墙&#xff0c;安全访问内网资源。以下是典型用例&#xff1a; SSH远程连接 配置示例&#xff1a; 客户端配置SSH映射&#xff0c;将本地22端口映射至公网服务器的6000端口&#xff0c;用户通过ssh -p 6000 user公网IP即可连接内网…...

git 设置保存密码 git保存密码

目录 长久保存密码 长久保存密码 git push和git pull都能使用。 git config --global credential.helper store 然后执行一次 git pull&#xff0c;Git 会提示输入用户名和密码&#xff0c; 输入后保存路径&#xff1a; ~/.git-credentials &#xff0c; Windows系统&…...

<项目> 主从Reactor模型的高并发服务器

目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop&#xff08;核心&#xff09; eventfd 设计思路 …...

注意力机制,本质上是在做什么?

本文以自注意机制为例&#xff0c;输入一个4*4的矩阵 如下&#xff1a; input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时&#xff0c;计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…...

使用Python在Word中创建、读取和删除列表 - 详解

目录 工具与设置 Python在Word中创建列表 使用默认样式创建有序&#xff08;编号&#xff09;列表 使用默认样式创建无序&#xff08;项目符号&#xff09;列表 创建多级列表 使用自定义样式创建列表 Python读取Word中的列表 Python从Word中删除列表 在Word中&#xff…...

右键添加:新建HTML模板文件

使用注册表给Windows右键添加:新建HTML文档模板的功能_注册表右键新建-CSDN博客 新建文件有了&#xff0c;但是没有引用模板文件&#xff0c;是空文件。 默认改成 htmlfile 模板成功...

Windows10配置OpenJDK11

下载 # 华为OpenJDK镜像源 https://mirrors.huaweicloud.com/openjdk/11.0.2/解压 # 解压后至于C:\Dev\Env\Java\jdk-11.0.2目录下 https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_windows-x64_bin.zip编译安装 # 以管理员身份运行 CMD命令提示符 并进入JD…...

浅谈Go垃圾回收机制-面试笔记

Go 语言的垃圾回收机制&#xff08;Garbage Collection&#xff0c;GC&#xff09;是其内存管理的重要组成部分&#xff0c;以下是相关介绍&#xff1a; 1、基本原理 标记 - 清除算法&#xff1a;Go 语言的垃圾回收主要基于三色标记 - 并发清除算法。首先&#xff0c;从根对象…...

统一开放世界与开放词汇检测:YOLO-UniOW无需增量学习的高效通用开放世界目标检测框架

目录 一、摘要 二、引言 三、相关工作 开放词汇对象检测 开放世界目标检测 参数高效学习 四、高效通用的开放世界目标检测 问题定义 高效的自适应决策学习 开放世界通配符学习 五、Coovally AI模型训练与应用平台 六、实验 数据集 评价指标 实施细节 定量结果 …...

如何给商品一键换色?图生生AI,告别繁琐修图

在电商竞争日益激烈的今天&#xff0c;商品图片的视觉效果直接影响着消费者的购买决策。而商品颜色的展示&#xff0c;更是重中之重&#xff01;传统的图片换色方式&#xff0c;往往需要耗费设计师大量的时间和精力&#xff0c;从抠图到调色&#xff0c;再到细节调整&#xff0…...

AIGC-名人语录账号运营创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)...

基于MySQL的创建Java实体Bean和TypeScript实体Bean

基于MySQL的创建Java实体Bean和TypeScript实体Bean 基于MySQL的创建Java实体Bean和TypeScript实体Bean select ORDINAL_POSITION as a, -- Data -- Schema(description "货物管理表") -- TableName("lpg_cargo") -- public class CargoEntity implements…...

10-STL、位运算、常用函数库

1-STL vector vector是变长数组 //定义vector vector<int>a;//第一维长233&#xff0c;第二维长度动态变化 vector<int>b[233];//自定义的结构体类型也可以保存在vector中 struct res{...}; vector<rec>c;//函数 a.size();//返回vector的实际长度&#xf…...

练习-班级活动(map存储键值对)

问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 n 以内的正整数作为 id&#xff0c;第 i 名同学的 id 为 ai​。 老师希望…...

纯血鸿蒙:中国操作系统自主创新的里程碑

引言&#xff1a;破局者登场 2024 年 10 月&#xff0c;搭载纯血鸿蒙操作系统&#xff08;HarmonyOS NEXT&#xff09;的华为 Mate 70 系列正式发布&#xff0c;首日预约量突破 330 万。这场现象级热度的背后&#xff0c;不仅是消费者对硬件创新的期待&#xff0c;更是中国科技…...

OpenHarmony 开源鸿蒙北向开发——hdc工具安装

hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。简单来讲&#xff0c;hdc 是 Op…...

buu-bjdctf_2020_babystack2-好久不见51

整数溢出漏洞 将nbytes设置为-1就会回绕&#xff0c;变成超大整数 从而实现栈溢出漏洞 环境有问题 from pwn import *# 连接到远程服务器 p remote("node5.buuoj.cn", 28526)# 定义后门地址 backdoor 0x400726# 发送初始输入 p.sendlineafter(b"your name…...

YOLO魔改之SAM空间注意力模块

基于SAM注意力的YOLOv7改进算法详解(可用于工业检测方案) 一、应用场景说明 本改进算法适用于以下工业检测场景: ​复杂背景下的微小目标检测​(电子元件缺陷、PCB板焊点)​密集目标重叠检测​(传送带上的包裹分拣、人群计数)​动态环境目标追踪​(无人机巡检、自动驾…...

【Java SE】抽象类/方法、模板设计模式

目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式&#xff08;抽象类使用场景&#xff09; 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff…...

文件相关函数的总结与记忆

1.字符的输入输出 char ch getchar();//不需要传递参数 putchar(a)putc、getc与fputc、fgetc一致 //必须用int接受&#xff0c;因为返回int类型&#xff0c;char因为编译器不同而可能为无符号和有符号 int ch if( (ch getchar() ) ! EOF) 2.行的输入输出 也可以用于二进制…...

SpringBoot有几种获取Request对象的方法

HttpServletRequest 简称 Request&#xff0c;它是一个 Servlet API 提供的对象&#xff0c;用于获取客户端发起的 HTTP 请求信息。例如&#xff1a;获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。 那么问题来了&#xff0c;在 Spring Boot 中…...

Unix 域套接字(本地套接字)

Unix 域套接字&#xff08;Unix Domain Sockets&#xff09;&#xff0c;也称为本地套接字&#xff08;Local Sockets&#xff09;&#xff0c;是一种用于同一主机上进程间通信&#xff08;IPC&#xff09;的机制。Unix 域套接字提供了一种高效的进程间通信方式&#xff0c;它利…...

Nordic nRF 蓝牙的 Direct Test Mode (DTM) 测试介绍

目录 概述 1. 核心物理层参数 1.1 射频频率 (RF Channel Frequency) 1.2 发射功率 (TX Power) 1.3 调制方式 (Modulation) 1.4 数据包类型 (Packet Type) 1.5 测试模式 (Test Mode) 2. 参数配置方法 2.1 通过 HCI 命令配置 2.2 示例&#xff08;nRF52 系列&#xff0…...

go安装lazydocker

安装 先安装go环境 https://blog.csdn.net/Yqha1/article/details/146430281?fromshareblogdetail&sharetypeblogdetail&sharerId146430281&sharereferPC&sharesourceYqha1&sharefromfrom_link 安装lazydocker go install github.com/jesseduffield/laz…...