31天Python入门——第18天:面向对象三大特性·封装继承多态
|
文章目录
- 面向对象三大特性
- 1. 封装
- 2. 继承
- 3. 多态
- 4. 抽象基类
- 5. 补充练习

面向对象三大特性
面向对象编程(Object-Oriented Programming, 简称OOP)有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, 它们使得程序的设计更加灵活、易于维护和扩展.
1. 封装
封装是指将数据和操作数据的方法封装在一个单独的单元中, 对外部隐藏数据的具体实现细节, 只暴露必要的接口供外部访问.
通过封装, 可以实现数据的隐藏和保护, 防止外部直接访问对象的内部数据, 同时还可以控制对数据的修改和操作, 确保数据的有效性和安全性.
封装的优势:
- 提高代码的安全性和可靠性, 外部无法直接修改对象的内部数据, 只能通过定义的接口进行访问和操作.使得对象的数据对外部是不可见的, 提高了数据的安全性和私密性.
- 封装可以将一组数据和操作封装成一个对象, 使得代码更加模块化和可复用.其他部分的代码可以通过调用对象的接口来使用其功能, 无需关心内部的具体实现.
- 封装可以降低代码之间的耦合性. 对象之间通过接口进行通信, 而不是直接访问和修改其内部状态, 这使得代码更加灵活和易于维护.
class Student:def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):print(f"大家好, 我的名字叫{self.name}, 今年{self.age}岁")# 创建实例对象
stu = Student('张三', 18)
stu.name = '李四'
stu.age = 20print(stu.name)
print(stu.age)# 李四
# 20# 这里的实例变量name和age都是公有属性, 类外可以直接访问和修改.
封装的实现
在 Python 中, 封装通过类来实现.将数据和操作封装在一个类中.类定义了对象的属性和方法, 属性表示对象的状态, 方法表示对象的行为.
在 Python 中, 封装并不是强制性的, 所有的属性和方法默认都是公开的, 外部可以直接访问和修改.但是, 可以通过命名约定来约束对属性和方法的访问.通常, 以下命名约定用于指定属性和方法的访问控制:
公有属性和方法: 默认情况下, 类中的属性和方法都是公有的, 它们的名字前都没有下划线, 这类型的属性和方法在类的外部, 内部, 子类中, 都是可以正常访问的.
私有属性和方法: 以双下划线(__)开头的属性和方法表示为私有的
, 外部不能直接访问.如果外部需要访问或修改这些属性, 应该通过公开的接口方法来实现.
受保护的属性和方法: 以单下划线(_)开头的属性和方法表示为受保护的
, 外部可以访问, 但是应该将其视为内部实现, 不建议直接访问.
class Student:def __init__(self, name, age):self.__name = name # 私有属性self.age = agedef introduce(self):print(f"大家好, 我的名字叫{self.__name}, 今年{self.age}岁")# 创建实例对象
stu = Student('张三', 18)
stu.__name = '李四' # 理论上来说类外不能访问和设置私有属性
stu.age = 20print(stu.__name)
print(stu.age)# 李四
# 20# 为什么这里在类外也可以访问和设置私有属性呢?# 如果我们执行实例方法.introduce():
stu.introduce()
# 大家好, 我的名字叫张三, 今年20岁# 我们发现类内的数据并没有改变
# 所以上面在类外设置私有变量值, 对类的内部并没有影响.
我们在类外使用和设置类内的私有属性需要通过类内的公有方法:
class Student:def __init__(self, name, age):self.__name = nameself.__age = agedef introduce(self):print(f"大家好, 我的名字叫{self.__name}, 今年{self.__age}岁")def get_name(self):return self.__namedef get_age(self):return self.__agedef set_name(self, name):self.__name = namedef set_age(self, age):self.__age = age# 创建实例对象
stu = Student('张三', 18)stu.set_name('李四')
stu.set_age(20)name = stu.get_name()
age = stu.get_age()print(name)
print(age)
私有属性的原理:
class A:def __init__(self):self.__attr = 1self._attr = 2self.attr = 3a = A()
print(a.__attr) # 报错
print(a._attr) # 2
print(a.attr) # 3# Python当中私有的实现, 实际上就是变量名改了一个名字, 仅此而已
我们能够看到保护属性和公有属性在存储的时候都是原来的名字, 但是对于私有属性__attr在存储的时候名字变了, 在私有属性名字前使用了单下划线+类名作为前缀.
所以说如果我们在类中使用修改后的私有变量名, 是可以正常访问到私有变量的, 没错是这样的:
class A:def __init__(self):self.__attr = 1self._attr = 2self.attr = 3a = A()
print(a._A__attr) # 1
print(a._attr) # 2
print(a.attr) # 3
所以之前在类外设置私有属性的值, 其实访问的不是类内的私有属性, 而是类外自己设置的一个新的属性, 因为类内的私有属性名字已经变了.
2. 继承
继承是面向对象编程中的一种重要特性, 它允许一个类(子类)从另一个类(父类)继承属性和方法, 并且可以在此基础上进行扩展和修改.
通过继承, 子类可以复用父类的代码, 避免重复编写相同的功能, 同时可以在子类中添加新的属性和方法, 或者重写父类的方法, 从而实现代码的灵活和易于扩展.
优势
- 代码重用: 继承允许子类从父类继承属性和方法, 避免了重复编写相同的代码, 提高了代码的重用性.
- 代码组织和扩展: 继承可以使代码的组织结构更加清晰, 将通用的功能封装在父类中, 特定的功能在子类中实现, 便于代码的维护和扩展.
- 代码复杂性降低: 继承使得代码的层次结构更加清晰, 提高了代码的可读性和可维护性, 降低了代码的复杂性.
语法
在Python中, 继承使用class 子类名(父类名)
的语法来实现, 子类拥有父类的所有属性和方法.子类可以直接使用父类的方法, 也可以在子类中添加新的方法或者重写父类的方法.(私有属性是不能继承过来的)
class Person:# 类属性id_number = 123123def __init__(self, name):self.name = namedef greet(self):print(f"你好, 我叫 {self.name}")class Student(Person):"""单继承"""def __init__(self, name, stu_id):super().__init__(name)self.name = nameself.stu_id = stu_iddef show_stu_id(self):print(f"姓名: {self.name}, 学号: {self.stu_id}")stu = Student('张三', 123)
stu.show_stu_id()
stu.greet()
print(stu.id_number)# 姓名: 张三, 学号: 123
# 你好, 我叫 张三
# 123123
多继承
注意: Python虽然支持多继承, 但是不建议使用, 只使用单继承即可.
在Python中, 一个子类可以继承多个父类, 这种继承方式称为多继承.多继承允许子类同时拥有多个父类的属性和方法.
方法重写
子类可以重写父类的方法, 即在子类中重新实现与父类同名的方法.这样做可以根据子类的需要修改或扩展方法的行为.
调用父类的成员
super: super()
用于调用父类的成员, 它可以在子类中调用父类的成员.
class Singer:def sing(self):print("正在唱歌")class Dancer:def dance(self):print("正在跳舞")class SingerDancer(Singer, Dancer):"""多继承"""passsinger_dancer = SingerDancer()
singer_dancer.sing()
singer_dancer.dance()print(SingerDancer.mro())
# [<class '__main__.SingerDancer'>, <class '__main__.Singer'>, <class '__main__.Dancer'>, <class 'object'>]# MRO 确保了在多继承的情况下,方法的调用顺序是明确且一致的. 它避免了方法调用的歧义,并确保了 Python 的多继承机制能够正确工作.
3. 多态
多态就是多种状态, 即做某一个行为(同样的行为)的时候, 使用不同的对象会得到不同的状态.
在面向对象编程中, 多态是一种重要的概念, 它允许不同的对象对相同的方法做出不同的响应.简而言之, 多态使得可以使用统一的接口来调用不同类的对象, 而无需关心对象的具体类型, 从而实现更灵活和可扩展的代码设计.
在Python中, 多态性是由动态类型和动态绑定实现的.具体来说, Python是一种动态类型语言, 这意味着变量的类型在运行时根据赋值而确定, 而不是在编译时确定.因此, 同一个方法名可以在不同的类中实现, 并且可以根据对象的类型调用不同类的方法
class Cat:def say(self):print("喵喵")class Dog:def say(self):print("汪汪")animal = Cat()
# animal = Dog()
animal.say()
4. 抽象基类
抽象基类(Abstract Base Classes, 简称ABC)是Python中的一个重要概念, 它允许我们定义抽象类和抽象方法, 从而可以规范子类的行为.
抽象基类并不能被实例化, 只能用于继承.子类必须实现抽象基类中定义的所有抽象方法.
Python中的抽象基类通过abc
模块提供, 使用抽象基类可以达到以下几个目的:
- 规范子类行为: 抽象基类允许我们定义一组接口或方法, 子类必须实现这些方法, 从而规范了子类的行为.
- 约束方法命名: 通过抽象基类可以强制子类必须实现指定的方法, 这样可以避免方法名拼写错误或者忘记实现方法的问题.
- 多态性支持: 抽象基类实现了多态性, 可以在使用抽象基类的地方接受多种不同的子类对象, 从而实现更灵活的代码设计.
- 文档化接口: 抽象基类可以帮助文档化接口, 让开发者了解哪些方法必须实现, 哪些是可选的.
from abc import ABCMeta, abstractmethodclass Animal(metaclass=ABCMeta): # ABCMeta 是一个元类,用于创建抽象基类"""抽象基类""""""元类就是创建类的类"""# abstractmethod 是一个装饰器,用于定义抽象方法# 子类中必须实现这些抽象方法@abstractmethoddef say(self):# 在抽象基类中,当一个方法被定义为抽象方法时# 通常会使用raise NotImplementedError来明确表示这个方法需要在子类中被具体实现raise NotImplementedErrorclass Cat(Animal):def say(self):print("喵喵")class Dog(Animal):def say(self):print("汪汪")animal = Cat()
animal.say()
class Phone:# 抽象基类def call(self): # 抽象方法raise NotImplementedErrordef music(self):raise NotImplementedErrordef wechat(self):raise NotImplementedErrorclass Apple(Phone):passclass HuaWei(Phone):pass
5. 补充练习
"""
设计一个图形类(Shape),包含计算面积的方法(calculate_area)。然后设计三个子类:圆类(Circle)、
矩形类(Rectangle)和三角形类(Triangle),分别实现计算面积的方法。要求实现以下功能:分别创建圆、矩形和三角形的对象,并设置它们的相关属性(例如半径、长和宽、底和高等)。
分别调用这些对象的计算面积方法,并打印出计算结果。
"""
from math import piclass Shape:def calculate_area(self):raise NotImplementedErrorclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef calculate_area(self):area = pi * self.radius ** 2return areaclass Rectangle(Shape):def __init__(self, length, width):self.length = lengthself.width = widthdef calculate_area(self):area = self.length * self.widthreturn areaclass Triangle(Shape):def __init__(self, base, height):self.base = baseself.height = heightdef calculate_area(self):area = self.base * self.height * 0.5return area# shape = Circle(5)
# shape = Rectangle(5, 6)
shape = Triangle(5, 6)
_area = shape.calculate_area()
print(_area)
|
|
相关文章:
31天Python入门——第18天:面向对象三大特性·封装继承多态
你好,我是安然无虞。 文章目录 面向对象三大特性1. 封装2. 继承3. 多态4. 抽象基类5. 补充练习 面向对象三大特性 面向对象编程(Object-Oriented Programming, 简称OOP)有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, …...
css_z-index属性
z-index 工作原理及层叠上下文(Stacking Context) 在 CSS 中,z-index 主要用于控制元素的堆叠顺序,决定哪些元素显示在上层,哪些元素在下层。它的工作原理涉及 层叠上下文(Stacking Context)&a…...
ros2--xacro
什么是xacro 在ROS 2中,Xacro(XML Macros)是一种基于XML的宏语言,专门用于简化URDF(Unified Robot Description Format)文件的编写。它通过宏定义、变量替换和代码复用等功能,让机器人模型的描…...
Nordic 新一代无线 SoC nRF54L系列介绍
目录 概述 1 nRF54L系列特点 1.1 内存 1.2 芯片封装 2 增强的多协议支持 3 其他特性 4 nRF54L系列MCU特性 4.1 多协议无线电 4.2 安全性 4.3 存储空间 4.4 工作参数 4.5 调试接口 4.6 外设 概述 全新 nRF54L 系列的所有三款器件均将 2.4 GHz 无线电和 MCU 功能 (包括…...
力扣HOT100之矩阵:240. 搜索二维矩阵 II
这道题直接暴力AC的,虽然也能过,但是耗时太长了。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int edge min(matrix.size(), matrix[0].size()) - 1; //先在edge * edge的矩阵中搜索for…...
一个判断A股交易状态的python脚本
最近在做股票数据相关的项目,需要用到判断某一天某个时刻A股的状态,比如休市,收盘,交易中等,发动脑筋想了一下,这个其实还是比较简单的,这里我把实现方法分享给大家。 思路 当天是否休市 对于某…...
为什么package.json里的npm和npm -v版本不一致?
这个情况出现是因为package.json里的 npm 版本和系统实际使用的 npm 版本是两个不同的概念。让我来解释一下: 原因解释 全局 npm vs 项目依赖: npm -v显示的是系统全局安装的 npm 版本(位于/usr/bin/npm或类似路径)package.jso…...
Rust 有问有答之 use 关键字
use 是什么# use 是 Rust 编程语言的关键字。using 是 编程语言 C# 的关键字。 关键字是预定义的保留标识符,对编译器有特殊意义。 using 关键字有三个主要用途: using 语句定义一个范围,在此范围的末尾将释放对象。 using 指令为命名空间创…...
[skip]CBAM
论文题目:CBAM: Convolutional Block Attention Module 中文题目:CBAM: 注意力卷积模块 0摘要 我们提出了卷积块注意力模块(CBAM),一个简单而有效的前馈卷积神经网络注意力模块。给定一个中间特征图,我们的模块沿着两个独立的维度(通道和空间)顺序推断注意力图,然后…...
突破反爬困境:SDK开发,浏览器模块(七)
声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的,旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...
在MFC中使用Qt(四):使用属性表(Property Sheet)实现自动化Qt编译流程
前言 首先回顾下前面文章介绍的: 在MFC中使用Qt(一):玩腻了MFC,试试在MFC中使用Qt!(手动配置编译Qt) 在MFC中使用Qt(二):实现Qt文件的自动编译流…...
相机镜头景深
文章目录 定义影响因素实际应用特殊情况 参考:B站优致谱视觉 定义 景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像器轴线所测定的物体距离范围。简单来说,就是在一张照片中,从前景到背景,能够保持清晰锐利的区域…...
HTML实现图片上添加水印的工具
HTML实现图片上添加水印的工具 本文介绍两种实现方式:图片上添加文字水印和图片上添加图片水印。部分源码参照自网络。 一、图片上添加文字水印 先看效果图: 源码如下: <!DOCTYPE html> <html lang"zh"> <head&…...
mysql JSON_ARRAYAGG联合JSON_OBJECT使用
父表数据(表名:class) idname1一年级2二年级3三年级 子表数据(表名:students) idnameclassId11张三112李四113小明3 sql查询(推荐使用方法一) 方法一 (使用IFNull判断子表数据是否…...
VMware虚拟机 ubuntu22.04无法与共享粘贴板和拖拽文件的解决方案
VMware虚拟机 ubuntu22.04无法与共享粘贴板和拖拉文件的解决方案 卸载VMware tools安装open-vm-tools还无法拖拽文件 卸载VMware tools 确保卸载完vmware-tools # 进入vmware-tools安装目录/bin sudo vmware-uninstall-tools.pl sudo rm -rf /usr/lib/vmware-tools sudo apt-…...
C++STL---<functional>
C标准库中的 <functional> 库是一个强大的工具集,它提供了用于处理函数对象、函数绑定、函数包装等功能的设施,极大地增强了代码的灵活性和可复用性。 1. 函数对象(Functors) 函数对象,也被称作仿函数…...
【Android】BluetoothSocket.connect () 的实现与协议栈交互源码解析
本文以 Android 蓝牙框架中的BluetoothSocket.connect()方法为切入点,深入剖析 Android 设备与远程蓝牙设备建立连接的全流程。从 Java 层的 API 调用出发,逐步追踪至 JNI 层的接口转发,最终进入 Buedroid 协议栈(RFCOMM/L2CAP 层),揭示蓝牙连接的核心机制。重点解析了权…...
算法导论(动态规划)——简单多状态
算法思路(17.16) 状态表示: 在处理线性动态规划问题时,我们可以通过“经验 题目要求”来定义状态表示。通常有两种选择: 以某个位置为结尾的情况;以某个位置为起点的情况。 本题中,我们选择更常…...
主成分分析(PCA)学习介绍及其高阶应用,金融风险分析
前言 主成分分析(Principal Component Analysis, PCA)是统计学中一种重要的降维技术。它通过寻找数据中各特征之间的线性关系,来降低数据的维度,同时保留数据中的主要信息。PCA在机器学习、信号处理、图像处理等领域广泛应用&…...
利用 SSRF 和 Redis 未授权访问进行内网渗透
目录 环境搭建 编辑 发现内网存活主机 编辑 扫描内网端口 编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1:生成 payload 方式1:使用python生成 payload 方式二:使用 Gopher 工具 步骤 2:写入 Webshell…...
计算机网络和因特网
目录 1、什么是Internet? 1.1定义 1.2具体构成描述 2、什么是协议? 2.1 服务描述 2.2 网络协议 3、网络边缘 3.1 定义与组成 3.2 模式 3.3服务 4、接入网、物理媒介 4.1、宽带有线接入网技术 4.2、宽带无线接入网技术 5、网络核心…...
1.oracle修改配置文件
1.找到oracle的安装路径 D:\app\baozi\product\11.2.0\dbhome_1\NETWORK\ADMIN ,修改下面的两个文件。如果提示没有权限,可以先把这两个文件复制到桌面,修改完后,在复制回来。 2.查看自己电脑的主机名, 右击 - 此电脑 …...
算法篇-------------双指针法
温馨提示:由于c语言在编程上更有优势,更加简洁,本文代码均为c代码,其他语言也可以 做,思想是不变的! 1.应用场景 涉及到对数组的操作的题目,可以考虑双指针方法解决 2.基…...
Java关于包和final
什么是包? 包就是文件夹。用来管理等各种不同功能的java类,方便后期代码维护 包名的规则:公司域名反写包的作用,需要全部英文小写,见名知意。例如:com.pdsu.domain package com.pdsu.demain;public class…...
2025年华为HCIP题库分享
1101、 【拖拽题】OPSF邻接关系建立的过程中需要使用不同的报文,那么请分别将以下各个状态和该状态使用的报文联系起来。 答题格式为:11 22 33 43 正确答案:【12】【21】【24】【33】 解析: 建立邻居关系 RouterA的一个连接到广…...
49. 字母异位词分组
leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 先把每一个词都排序,拍完之后相同的就是字母异位词使用map,排序完的作为key,一个string数组作为value对于每一个词,排完序之后将…...
python 语法篇(一)
目录 1 正则匹配注意点11.1 正则匹配字符串写法1.2 创建re函数(1)re.search()--搜索第一个匹配项(2)re.match() - 从字符串开头匹配(3)re.findall() - 返回所有匹配项的列表(4)re.fi…...
机器学习ML极简指南
机器学习是现代AI的核心,从推荐系统到自动驾驶,无处不在。但每个智能应用背后,都离不开那些奠基性的模型。本文用最简练的方式拆解核心机器学习模型,助你面试时对答如流,稳如老G。 线性回归 线性回归试图通过"最…...
爬虫:网络请求(通信)步骤,http和https协议
电脑(浏览器):www.baidu.com——url DNS服务器:IP地址标注服务器——1.1.38 DNS服务器返回IP地址给浏览器 浏览器拿到IP地址去访问服务器,返回响应 服务器返回给响应数据:html/css/js/jpg... html:文本 cs…...
【杂谈】-大型语言模型对具身人工智能发展的推动与挑战
大型语言模型对具身人工智能发展的推动与挑战 文章目录 大型语言模型对具身人工智能发展的推动与挑战1. 具身人工智能(Embodied AI)的内涵解析2. 大型语言模型的功能与作用3. 最新发展趋势4. 面临的挑战与考量因素5. 总结与展望 多年来,研发能…...
解决Beats Solo Buds 无法自动切换音频到耳机的问题
一、核心问题定位 现象矛盾点: Beats 耳机能连接但需手动切换音频 AirPods 可自动切换 → 排除 iOS 系统级故障 问题可能源于 Beats 固件兼容性 或 音频路由逻辑冲突 关键差异: 设备 芯片类型 自动切换协议支持 固件更新方式 AirPods 二代 H1芯片 原…...
MySQL基本查询
一.create 1.1 单行数据 全列插入 1.2 多行数据 指定列插入 1.3插入否则更新 1.4替换 二.Retrieve 2.1.SELECT列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4 为查询结果指定别名 2.1.5结果去重 2.2WHERE 条件 2.2.1比较运算符 2.2.3逻辑运算符…...
面基:为什么不推荐用UUID作为主键
推荐回答结构: 技术理论层面分析 实际项目中的教训 优化改进过程 总结提炼认知 阐述回答 在阐述回答时,你可以从 UUID 本身特性带来的问题,以及在实际工作中遇到的具体场景和优化过程等方面展开,下面从这一思路,给…...
oracle 常用函数的应用
在使用开发中会经常遇到数据类型转换、显示系统时间等情况,需要使用函数来实现。通过函数来实现业务需求会非常的省事便捷,函数可以用在适当的dml语句和查询语句中。 Oracle 数据库中主要使用两种类型的函数: (1)单行函数:对每一个…...
ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容
在我们安装ubuntu时,如果选择的是自动分区,就会按照逻辑卷的形式来分区,并且只分配100G其余的并不会被分配,这对我们大多数情况来说都是不合理的,所以,如何扩充呢 下面以一个小的案例来说明如何扩充 问题…...
鬼泣:升龙系统
文章目录 0.升龙系统:升龙斩使敌人浮空升龙斩使敌人浮空:设置flying状态,不会落下 1.升龙斩:S 攻击S按下calculate directionin range warp:前提是根运动打开蒙太奇拔刀收刀canCombo:接轻攻击连击 2. A.向…...
UI产品经理基础(四):用价值链视角来分析项目需求
用价值链视角来分析项目需求 作为产品经理,从价值链视角分析项目需求,能够更精准地定位价值创造的关键环节,确保资源投入与用户需求、商业目标深度匹配。以下是系统化的方法论与落地步骤,结合案例说明如何实现需求分析与用户认可…...
ThinkPHP的“get\post\put\delete“请求
首先了解一下这四个请求的区别 1.GET 请求 用途:获取资源(只读操作,不修改服务器数据)。 特点: 参数通过 URL 的 查询字符串(Query String) 传递(例如 /book?id1)。 数…...
目标检测的训练策略
在目标检测竞赛中,训练策略的优化是提高模型性能的关键。常用的训练策略包括数据预处理、数据增强、超参数调节、损失函数设计、正负样本采样、模型初始化和训练技巧等。以下是一些常见的训练策略: 1. 数据预处理与数据增强 数据归一化:对输…...
【JavaSE】小练习 —— 图书管理系统
【JavaSE】JavaSE小练习 —— 图书管理系统 一、系统功能二、涉及的知识点三、业务逻辑四、代码实现4.1 book 包4.2 user 包4.3 Main 类4.4 完善管理员菜单和普通用户菜单4.5 接着4.4的管理员菜单和普通用户菜单,进行操作选择(1查找图书、2借阅图书.....…...
代码随想录Day29
Day29 动态规划part02 LeetCode 62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” &…...
Python入门(3):语句
目录 1 基本语句 1.1 表达式语句 1.2 赋值语句 2 控制流语句 2.1 条件语句 2.2 循环语句 while循环: for循环: 2.3 流程控制语句 1. break语句:退出整个循环体 2. continue语句:只跳过本次循环,还会进…...
04_SQL概述及DDL
文章目录 一、关于SQL1.1、SQL概述1.2、SQL分类 二、数据库操作2.1、查看数据库2.2、切换数据库2.3、查询当前使用的数据库2.4、创建数据库2.5、查看数据库创建信息2.6、修改数据库2.7、删除数据库 三、表的操作3.1、数据类型3.1.1、数值类型3.1.2、字符串类型3.1.3、日期时间类…...
如何调整yarn.nodemanager.vmem-pmem-ratio参数?
调整 yarn.nodemanager.vmem - pmem - ratio 参数,可参考以下步骤: 打开YARN配置文件 找到 yarn - site.xml 文件,该文件通常位于Hadoop配置目录中,例如 /etc/hadoop/conf 或 /opt/module/hadoop - 3.1.3/etc/hadoop 。 找到并修改…...
【质量管理】质量的系统是预防,那以预防为主的质量管理系统包括什么?
“质量的系统是预防”这是克劳士比零缺陷管理四项基本原则的第二项基本原则。什么样的系统才是一个以预防为主的质量管理系统呢? 一个以预防为主的质量系统,必须包括三大方面:质量检验系统、质量保证系统、质量管理系统。 举个例子࿱…...
JavaScript 事件流与事件委托
目录 一、事件流、事件捕获与事件冒泡 1. 事件流(Event Flow) 2. 事件捕获(Event Capturing) 3. 事件冒泡(Event Bubbling) 4. 阻止事件冒泡 5. 事件解绑 6. 实际应用场景 二、事件委托 1. 什么是…...
RAG 优化 Embedding 模型或调整检索策略
在 RAG(Retrieval-Augmented Generation)系统中,优化 Embedding 模型和调整检索策略是提升检索质量的核心手段。以下是系统化的优化方法和实践指南: 一、优化 Embedding 模型 Embedding 模型的质量直接决定检索的召回率(Recall)和准确率(Precision)。优化方向包括: …...
Sentinel[超详细讲解]-3
主要讲解🚀 - 基于QPS/并发数的流量控制 1、流控规则 流量控制(Flow Control)用于限制某个资源的访问频率,防止系统被瞬时的流量高峰冲垮。流量控制规则可以针对不同的资源进行配置,例如接口、方法、类等。 流量规则的…...
vue3使用i18n$t()无法获取数组和对象
今天在使用i18n进行国际化时,定义了数组和对象节点,但是用$t()无法获取,只能返回字符串值,查询相关材料,解决方案如下: 使用新的api替换即可,$t > $tm 参考文章(深表谢意):vue -…...
机器学习的一百个概念(5)数据增强
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...