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

Python 面向对象编程全面解析与深度探索

目录

类和对象的概念

类(Class)

对象(Object)

(一)属性(Attributes)

(a).实例属性(Instance Attributes)

(b).类属性(Class Attributes)

(二)方法(Methods)

(a)实例方法(Instance Methods)

(b)类方法(Class Methods)

(c)静态方法(Static Methods)

(三) 继承(Inheritance)

(四) 多态(Polymorphism)

(五) 封装(Encapsulation)

补充

(1)特殊方法(Magic Methods)或双下划线方法(Dunder Methods)

(2)装饰器与面向对象

(3)类的组合

(4)元类(Metaclasses)


 

类和对象的概念

  • 类(Class)

    • 类是一种抽象的数据类型,它定义了一组具有相同属性(Attributes)和方法(Methods)的对象的模板。可以把类想象成制作某种物品的蓝图。例如,定义一个 “汽车(Car)” 类,这个类可以包含汽车的属性,如颜色(color)、品牌(brand)、速度(speed)等,以及汽车可以执行的方法,如加速(accelerate)、刹车(brake)等。
    • 在 Python 中,类的定义使用class关键字。例如:
class Car:def __init__(self, color, brand):self.color = colorself.brand = brandself.speed = 0

 

  • 对象(Object)

    • 对象是类的一个具体实例。根据上面的 “汽车(Car)” 类的蓝图,可以创建出多个具体的汽车对象。比如,car1 = Car("red", "Toyota")car2 = Car("blue", "Ford"),这里car1car2就是Car类的两个对象,它们分别具有自己的颜色、品牌和初始速度(在__init__方法中初始化为 0)等属性。

(一)属性(Attributes)

(a).实例属性(Instance Attributes)

  • 实例属性是属于对象个体的属性。在上面的Car类中,colorbrandspeed就是实例属性。每个Car类的对象都可以有不同的颜色和品牌,并且它们的速度也可以独立变化。通过self关键字来访问和修改实例属性。例如:
class Car:def __init__(self, color, brand):self.color = colorself.brand = brandself.speed = 0def accelerate(self, increment):self.speed += increment

accelerate方法中,通过self.speed来访问和修改对象的速度属性。

(b).类属性(Class Attributes)

  • 类属性是属于类本身的属性,被该类的所有对象所共享。例如,定义一个Car类的类属性wheels来表示汽车的轮子数量,因为通常汽车的轮子数量是固定的(假设为 4),对于所有Car类的对象都是一样的。
class Car:wheels = 4def __init__(self, color, brand):self.color = colorself.brand = brandself.speed = 0

可以通过Car.wheels来访问类属性,所有Car类的对象都共享这个属性值。

(二)方法(Methods)

(a)实例方法(Instance Methods)

  • 实例方法是定义在类中的函数,用于操作对象的实例属性或者执行与对象相关的操作。实例方法的第一个参数通常是self,它代表调用该方法的对象本身。例如在Car类的accelerate方法中,self表示正在加速的那个汽车对象。
class Car:def __init__(self, color, brand):self.color = colorself.brand = brandself.speed = 0def accelerate(self, increment):self.speed += incrementdef brake(self, decrement):if self.speed >= decrement:self.speed -= decrementelse:self.speed = 0

这里acceleratebrake都是实例方法,它们通过self访问和修改对象的speed属性。

(b)类方法(Class Methods)

  • 类方法是与类本身相关的方法,而不是与类的某个具体对象相关。类方法使用@classmethod装饰器来定义,并且第一个参数通常是cls,代表类本身。类方法可以用于创建工厂方法或者修改类属性等操作。例如:
class Car:wheels = 4@classmethoddef change_wheels(cls, new_wheels):cls.wheels = new_wheels

通过Car.change_wheels(6)可以修改Car类的wheels类属性的值。

(c)静态方法(Static Methods)

  • 静态方法是定义在类中的普通函数,它不需要访问实例属性或者类属性,也不需要self或者cls参数。静态方法通常用于实现一些与类相关但又不依赖于类的实例或者类本身的状态的功能。例如:
class Car:@staticmethoddef is_motor_vehicle():return True

is_motor_vehicle静态方法只是简单地返回一个布尔值,表示汽车是机动车,它不依赖于任何Car类的实例或者类属性。


(三) 继承(Inheritance)

  • 继承是面向对象编程中的一个重要特性,它允许创建一个新类(子类),子类继承了父类的属性和方法,并且可以添加新的属性和方法或者重写父类的现有属性和方法。例如,定义一个 “电动汽车(ElectricCar)” 类,它继承自 “汽车(Car)” 类。
class ElectricCar(Car):def __init__(self, color, brand, battery_capacity):super().__init__(color, brand)self.battery_capacity = battery_capacitydef charge(self):print("Charging the electric car.")

ElectricCar类中,通过super().__init__(color, brand)调用父类Car__init__方法来初始化继承自父类的属性(colorbrand),同时添加了新的属性battery_capacity和新的方法charge

(四) 多态(Polymorphism)

  • 多态是指不同类型的对象对同一消息(方法调用)做出不同的响应。在 Python 中,多态通常通过方法重写(在子类中重新定义父类的方法)来实现。例如,Car类和ElectricCar类都有accelerate方法,但是它们的实现细节可能不同。
class Car:def __init__(self, color, brand):self.color = colorself.brand = brandself.speed = 0def accelerate(self, increment):self.speed += increment
class ElectricCar(Car):def __init__(self, color, brand, battery_capacity):super().__init__(color, brand)self.battery_capacity = battery_capacitydef accelerate(self, increment):# 假设电动汽车加速方式不同self.speed += increment * 2

当调用car.accelerate(10)carCar类的对象)和electric_car.accelerate(10)electric_carElectricCar类的对象)时,它们会根据各自类中accelerate方法的定义做出不同的加速行为,这就是多态的体现。


(五) 封装(Encapsulation)

  • 封装是将数据(属性)和操作数据的方法组合在一起,并对外部隐藏对象的内部细节。在 Python 中,可以通过在属性和方法名前面添加双下划线(__)来实现一定程度的封装。例如:
class Car:def __init__(self, color, brand):self.__color = colorself.__brand = brandself.__speed = 0def accelerate(self, increment):self.__speed += incrementdef get_color(self):return self.__colordef set_color(self, new_color):self.__color = new_color

在这个Car类中,__color__brand__speed属性被封装起来,外部不能直接访问这些属性,但是可以通过get_colorset_color等方法来间接访问和修改属性的值。这样可以保护对象的内部状态,防止外部代码随意修改,提高代码的可维护性和安全性

 

补充

(1)特殊方法(Magic Methods)或双下划线方法(Dunder Methods)

这些方法在 Python 中具有特殊的意义,它们通常以双下划线开头和结尾。例如 __str__ 和 __repr__ 方法用于对象的字符串表示。

class Car:def __init__(self, color, brand):self.color = colorself.brand = branddef __str__(self):return f"Car: {self.brand} in {self.color}"def __repr__(self):return f"Car({self.color}, {self.self.brand})"

__str__ 方法主要用于提供给用户友好的对象字符串表示,比如在使用 print 函数打印对象时会调用该方法__repr__ 方法则更侧重于提供对象的精确表示,通常在交互式环境中直接输入对象时显示,也用于对象的序列化等场景,有助于调试和记录对象的状态。

还有其他一些特殊方法,如 __add__ 用于定义对象的加法操作。例如对于自定义的向量类,可以定义 __add__ 方法来实现向量相加的逻辑:

class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):return Vector(self.x + other.x, self.y + other.y)

这样就可以像使用内置数据类型一样对自定义的 Vector 类对象进行加法运算:v1 = Vector(1, 2); v2 = Vector(3, 4); v3 = v1 + v2 。

(2)装饰器与面向对象

装饰器可以应用于类和类的方法,以扩展其功能。例如,@property 装饰器是一种常用的装饰器,它可以将一个方法转换为一个类似属性的访问方式,同时可以在方法内部添加一些逻辑,比如数据验证等。

class Person:def __init__(self, name, age):self._name = nameself._age = age@propertydef age(self):return self._age@age.setterdef age(self, new_age):if new_age > 0:self._age = new_ageelse:raise ValueError("Age must be positive.")

这里通过 @property 装饰器将 age 方法转换为属性,使得可以像访问属性一样获取年龄值(person.age),同时通过 @age.setter 装饰器定义了属性的设置方法,在设置年龄时可以进行数据验证。

(3)类的组合

除了继承,类的组合也是构建复杂对象关系的重要方式。类的组合是指一个类将其他类的对象作为自己的属性,从而利用其他类的功能来构建更复杂的功能。

例如,一个 Car 类可以包含一个 Engine 类的对象作为其发动机属性:

class Engine:def start(self):print("Engine started.")def stop(self):print("Engine stopped.")class Car:def __init__(self, color, brand):self.color = colorself.brand = brandself.engine = Engine()def start_car(self):self.engine.start()def stop_car(self):self.engine.stop()

通过这种组合方式,Car 类可以利用 Engine 类的功能来实现汽车的启动和停止操作,而不需要继承 Engine 类,这种方式在一些情况下可以提供更灵活的设计,避免了复杂的继承层次带来的问题。

(4)元类(Metaclasses)

元类是创建类的类。在 Python 中,一切皆对象,类也是对象,而元类就是用来创建这些类对象的。默认情况下,Python 使用 type 作为元类来创建普通的类。但可以自定义元类来控制类的创建过程,例如添加自定义的属性或方法到创建的类中,或者修改类的定义方式。

class MyMeta(type):def __new__(cls, name, bases, attrs):attrs['new_attribute'] = "This is a new attribute added by metaclass"return super().__new__(cls, name, bases, attrs)class MyClass(metaclass=MyMeta):passprint(MyClass.new_attribute)
  1. 自定义元类 MyMeta 代码解读
class MyMeta(type):def __new__(cls, name, bases, attrs):attrs['new_attribute'] = "This is a new attribute added by metaclass"return super().__new__(cls, name, bases, attrs)

这里定义了一个名为 MyMeta 的自定义元类,它继承自 type(因为元类本身就是创建类的类,type 是 Python 中默认用于创建类的元类基础)。在 MyMeta 类里重写了 __new__ 方法,此方法在类创建时被调用。
在 __new__ 方法内,接收了几个关键参数:

  • cls:代表当前的元类自身(在这里就是 MyMeta 类)。
  • name:是即将要创建的类的名称(在后续示例中对应 MyClass 的类名)。
  • bases:是一个包含了新类要继承的基类的元组(示例中 MyClass 没有显式指定基类继承,该参数对应为空元组等情况)。
  • attrs:是一个字典,里面存放着即将创建的类的属性和方法等信息(类似类的命名空间)。
    在 __new__ 方法中,往 attrs 字典里添加了一个新的键值对,键是 new_attribute,值是 "This is a new attribute added by metaclass",意味着通过这个元类创建的类将会拥有这个新属性。最后,调用父类(也就是 type 类)的 __new__ 方法来实际创建类对象,并返回创建好的类对象。
  1. 使用自定义元类创建 MyClass 类及验证
class MyClass(metaclass=MyMeta):passprint(MyClass.new_attribute)

定义 MyClass 类时,通过 metaclass=MyMeta 指定了使用自定义的 MyMeta 元类来创建它。由于 MyMeta 元类在创建类时添加了 new_attribute 属性,所以后续可以直接通过 MyClass.new_attribute 来访问这个属性,并打印出对应的值 "This is a new attribute added by metaclass"

在这个例子中,自定义的元类 MyMeta 在创建 MyClass 类时添加了一个新的属性 new_attribute。虽然元类在日常编程中使用相对较少,但在一些高级的框架开发和特定的编程模式中有着重要的应用,如 Django 框架中的一些模型类的创建就利用了元类的特性来实现数据库表的映射等功能。

 

 

相关文章:

Python 面向对象编程全面解析与深度探索

目录 类和对象的概念 类(Class) 对象(Object) (一)属性(Attributes) (a).实例属性(Instance Attributes) (b).类属性(Class Att…...

零配置打包工具 Parcel 的详细使用指南

前言 在前端开发中,选择一个高效且易用的打包工具至关重要。Parcel 作为一款零配置的 Web 应用打包工具,凭借其卓越的性能和简单的使用体验,赢得了众多开发者的青睐。它不仅能够自动处理依赖关系和代码打包,还支持热模块替换和多…...

批量查找文件关键字-工具

string find...

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install...

Quant connect的优势和不足,学习曲线难

Quant connect的优势和不足 Quant connect作为一个成熟的算法交易平台,具有许多优势,包括: 强大的回测功能:Quant connect提供了丰富的数据源和回测功能,可以对各种交易策略进行全面的回测和分析。 容易上手&#xf…...

对rust的全局变量使用drop方法

文章目录 rust处理全局变量的策略方法1:在main中自动Drop全局变量 参考 rust处理全局变量的策略 Rust 的静态变量不会在程序退出时自动调用 Drop,因为它们的生命周期与进程绑定。 use std::sync::OnceLock;struct GlobalData {content: String, }impl …...

使用FastGPT制做一个AI网站日志分析器

越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器,下面就开始: …...

无限次使用 cursor pro

github地址 cursor-vip 使用方式 在 MacOS/Linux 中,请打开终端; 在 Windows 中,请打开 Git Bash。 然后执行以下命令来安装: 部分电脑可能会误报毒,需要关闭杀毒软件/电脑管家/安全防护再进行 方式1:通过…...

vuex 作用及五大组成部分

Vuex 是 Vue.js 的官方状态管理库,旨在帮助开发者构建大型应用时更好地管理和共享全局状态。它提供了一种集中式存储和管理应用所有组件的状态的方式,并且遵循单一状态树的原则。通过 Vuex,可以更容易地实现状态的可预测性和调试。 一、Vuex…...

Centos7上Jenkins+Docker+Git+SpringBoot自动化部署

文章目录 1.宿主机安装maven2.安装jenkins3.配置Jenkins4.Jenkins脚本自动安装JDK(可选) 1.宿主机安装maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz mv apache-maven-3.9.9-bin.tar.gz /usr/local…...

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接:https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络(GCN)对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节,通过对分子数据集的操作实践,展示了完整的节点分类流程&#…...

高级Python游戏开发:创建一款多人对战坦克大战

在本教程中,我们将用Python的Pygame库开发一款高级的坦克大战游戏。这款游戏支持多人对战、碰撞检测、子弹射击以及地图障碍生成,适合作为学习Python高级游戏开发的练习项目。 一、游戏功能概述 多人对战模式:玩家可以操作坦克,在同一屏幕上互相攻击。子弹射击:坦克可以发…...

网站访问的基础-HTTP超文本传输协议

BS架构 浏览器Browser⬅➡服务器Server 浏览器和服务器之间通过 IP 地址进行通信,实现数据的请求和传输。 例如,当用户在浏览器中访问一个网站时,浏览器会根据用户输入的网址(通过 DNS 解析得到服务器 IP 地址)向服…...

使用Hydra库简化配置管理

使用Hydra库简化配置管理 简介 在现代软件开发中,配置管理是至关重要的。应用程序的灵活性和可维护性很大程度上取决于其如何处理配置。Hydra是一个由Facebook AI Research (FAIR) 开发的Python库,它旨在简化复杂应用的配置过程。Hydra使得开发者可以轻…...

Java对集合的操作方法

1. 数组转集合 //数组转集合 String[] split quickRechargeAmount.split(","); List<String> stringList Stream.of(split).collect(Collectors.toList()); 2. 对List集合数据内容进行分组 //对List集合数据内容进行分组 Map<String, List<LiveAppGi…...

WordPress酱茄主题 开源版 博客资讯自媒体网站模板

一款免费开源的WordPress主题&#xff0c;主题专为WordPress博客、资讯、自媒体网站而设计 运行环境 支持WordPress版本&#xff1a;5.6 兼容Chrome、Firefox、Safari等主流浏览器 支持设备&#xff1a;响应式布局&#xff0c;不同设备不同展示效果 服务器环境建议&#x…...

【SickOs1.1靶场渗透】

文章目录 一、基础信息 二、信息收集 三、反弹shell 四、提权 一、基础信息 Kali IP&#xff1a;192.168.20.146 靶机IP&#xff1a;192.168.20.150 二、信息收集 端口扫描 nmap -sS -sV -p- -A 192.168.20.150 开放了22、3128端口&#xff0c;8080端口显示关闭 22端…...

Javaweb web后端maven介绍作用安装

自动导入到这个项目 src是源代码 main主程序&#xff0c;核心代码 java是Java源代码 resources是项目配置文件 test测试相关的 maven概述 介绍 依赖在本地仓库查找&#xff0c;如果本地仓库有&#xff0c;用本地仓库的依赖&#xff0c;本地没有&#xff0c;连接中央仓库&…...

Input Action (输入动作) 在虚幻引擎中常用的值类型

1. Digital (bool) 含义: Digital 类型代表一个离散的、二元的输入状态,它只有两种可能的值:true(按下,激活)或 false(未按下,未激活)。 用途: 最常用于表示按键或按钮的按下状态。 适合于开关类型的操作,比如: 跳跃(按键按下时跳跃,松开时不跳跃) 奔跑/行走切换 …...

LabVIEW汽车综合参数测量

系统基于LabVIEW虚拟仪器技术&#xff0c;专为汽车带轮生产中的质量控制而设计&#xff0c;自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合&#xff0c;能够对带轮的直径、厚度等多个参数进行高精度测量&#xff0c;并通过比较测量法判定产品合…...

快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3

快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3 1、确保已经安装了PostgreSQL数据库。2、添加PostGIS的EPEL仓库3、使用YUM安装PostGIS4、以下为其他安装方式&#xff0c;一个个去找源码的编译安装&#xff0c;过程较为繁琐&#xff08;不熟路的不推荐&#xff09; 要…...

MySQL八股文

MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;使用最常用的数据库管理语言–结构化查询语言&#xff08;SQL&…...

Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi

&#xff08;1&#xff09;创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速&#xff08;高性能&#xff09;的Web API的Python框架。uvicorn 是一个ASGI服务器&#xff0c;用于运行异步的Python Web应用…...

多模态机器学习综述论文|Multimodal Machine Learning: A Survey and Taxonomy

1. 引言 多模态机器学习是一个跨学科领域&#xff0c;它涉及到从多种感官模态&#xff08;如视觉、听觉、触觉等&#xff09;中提取信息&#xff0c;并构建能够处理和关联这些信息的模型。这种学习方式对于人工智能理解复杂世界至关重要。 名词解释&#xff1a; 模态Modality…...

CentOS8:英伟达显卡驱动与CUDA安装

挺偶然的&#xff0c;同事在CentOS8版本的GPU服务器上安装英伟达的显卡驱动和CUDA遇到了问题&#xff0c;于是协助进行了安装&#xff0c;顺便记录下此次安装过程与心得。 目录 显卡驱动安装 步骤简述 详细步骤 1、官网下载需要的驱动 2、驱动软件包上传并加权 3、安装…...

【IDEA】启动报错

今天启动IDEA报错 报错信息&#xff1a; Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器&#xff0c;关掉进程ID5444的任务...

Opencv之图像梯度处理和绘制图像轮廓

一、梯度处理的sobel算子函数 处理示意 Sobel 算子是一种常用的图像边缘检测方法&#xff0c;结合了一阶导数和高斯平滑&#xff0c;用于检测图像的梯度信息。 1、功能 Sobel 算子用于计算图像在 x 和 y 方向的梯度&#xff0c;主要功能包括&#xff1a; 强调图像中灰度值的…...

5.2章节python字符串的格式化三种方式

在Python中&#xff0c;格式化字符串是编程中常见的任务&#xff0c;它用于将变量或表达式的值嵌入到字符串中。以下是三种常见的格式化字符串的方式&#xff1a; 1.百分号&#xff08;%&#xff09;格式化&#xff1a; 这是Python早期版本中常用的字符串格式化方法。通过在字…...

.NET Core 各版本特点、差异及适用场景详解

随着 .NET Core 的不断发展&#xff0c;微软推出了一系列版本来满足不同场景下的开发需求。这些版本随着时间的推移逐渐演变为统一的 .NET 平台&#xff08;从 .NET 5 开始&#xff09;。本文将详细说明每个版本的特点、差异以及适用场景&#xff0c;帮助开发者更好地选择和使用…...

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级&#xff0c;我来复盘小林coding的计算机网络的知识点&#xff1a; TCP/IP 网络模型有哪几层? 问大家&#xff0c;为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信&#xff0c;有…...

基于SpringBoot的嗨玩旅游网站:一站式旅游信息服务平台的设计与实现

摘要 在旅游需求日益增长的今天&#xff0c;一个全面、便捷的旅游信息服务平台显得尤为重要。嗨玩旅游网站正是为了满足这一需求而设计的在线平台&#xff0c;它提供了包括景点信息、旅游线路、商品信息、社区信息和活动推广等在内的丰富旅游目的地信息&#xff0c;旨在帮助用…...

HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构

HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构 效果图DRAWTEXTREL示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont DRAWTEXTABS示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont 效果图 …...

VMware ESXi上创建Ubuntu虚拟机并实现远程SSH访问全攻略

文章目录 前言1. 在VMware ESXI中创建Ubuntu虚拟机2. Ubuntu开启SSH远程服务3. 安装Cpolar工具4. 使用SSH客户端远程访问Ubuntu5. 固定TCP公网地址 前言 本文主要介绍如何在VMware ESXi上创建一台Ubuntu 22.04虚拟机&#xff0c;并通过Cpolar内网穿透工具配置公网地址&#xf…...

进制的转换

前言 ‌进制‌是一种进位计数制&#xff0c;是人为定义的带进位的计数方法。不同的进制使用不同数量的符号&#xff0c;以及不同的规则来组合这些符号以表示不同的数值。 一、进制类型 二进制:由一串0和1组成的数字&#xff0c;逢二进一 八进制:0 1 2 3 4 5 6 7&#xff0c;…...

迁移学习中模型训练加速(以mllm模型为例),提速15%以上

根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…...

CSS系列(6)-- 排版与文本详解

前端技术探索系列&#xff1a;CSS 排版与文本详解 &#x1f4dd; 致读者&#xff1a;探索优雅的文字艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS 排版与文本处理&#xff0c;学习如何创建既美观又易读的文本内容。 文本基础属性 &#x1f680; 字…...

嵌入式现状、机遇、挑战与展望

在当今数字化浪潮中&#xff0c;嵌入式系统宛如一颗璀璨的明珠&#xff0c;熠熠生辉&#xff0c;深刻地渗透到了我们生活的方方面面&#xff0c;成为推动现代科技进步不可或缺的关键力量。从智能家居的便捷控制&#xff0c;到工业生产的精准运作&#xff0c;再到汽车的智能驾驶…...

关于Postgresql旧版本安装

抛出问题 局点项目现场&#xff0c;要求对如下三类资产做安全加固&#xff0c;需要在公司侧搭建测试验证环境&#xff0c;故有此篇。 bclinux 8.2 tomcat-8.5.59 postgrel -11 随着PG迭代&#xff0c;老旧版本仅提供有限维护。如果想安装老版本可能就要费劲儿一些。现在&…...

【AI日记】24.12.14 kaggle 比赛 2-4 EDA

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset内容&#xff1a;构建自己的EDA&#xff08;探索性数据分析&#xff09;框架时间&#xff1a;5 小时感想&#xff1a;大规模数据集&a…...

《深入浅出HTTPS》读书笔记(18):公开密钥算法RSA(续)

【RSA算法安全性】 幂运算的逆过程就是求对数问题&#xff0c;而模运算可以认为是离散问题&#xff0c;组合起来RSA算法就是离散对数模型&#xff0c;只要密钥长度足够长&#xff0c;离散对数很难破解。 破解私钥有两个方法&#xff1a; ◎公钥持有人有e和n&#xff0c;而要计…...

LabVIEW面向对象编程有什么特点?

LabVIEW面向对象编程&#xff08;OOP&#xff09;的特点主要体现在它如何结合传统面向对象编程&#xff08;OOP&#xff09;的理念与LabVIEW的图形化编程模式&#xff0c;提供灵活的抽象和模块化的功能。以下是LabVIEW面向对象编程的几个主要特点&#xff1a; ​ 1. 类&#x…...

【Hive数据仓库】Hive部署、Hive数据库操作(增删改查)、表操作(内部表、外部表、分区表、桶表)

目录 一、本地模式 1、安装MySQL 2、登录MySQL 3、修改密码 4、安装Hive 5、配置Hive系统环境变量 6、初始化Derby数据库 7、连接Hive用于测试 8、测试Hive 9、修改Hive配置文件 10、上传MySQL驱动包 11、初始化MySQL 12、连接Hive用于启动服务 二、远程模式 1、…...

bugku-simple MQTT-wp解析

1.下载题目打开题目&#xff0c;是一个流量包&#xff0c;题目说是MQTT&#xff0c;然后打开流量之后的流量都是MQTT&#xff0c;我们来搜一下MQTT是什么流量 MQTT流量&#xff1a; 是一种基于发布订阅模式的轻量级的通讯协议&#xff0c;并且该协议构建于TCP/IP协议之上&…...

【第四节】Git 分支管理

目录 前言 一、Git 分支简介 二、 分支的基本操作 2.1 创建分支 2.2 切换分支 2.3 列出分支 三、 分支的合并与删除 3.1 合并分支 3.2 删除分支 四、处理合并冲突 五、 总结 前言 Git 的分支管理是其核心功能之一&#xff0c;允许开发者在不影响主线开发的情况下进行…...

IDEA 修改格式化仅格式化本次改动代码

最近总是发现格式化的时候会格式化文件所有代码&#xff0c;提交Git 后再看提交日志&#xff0c;就很不清晰。修改方式如下 中文&#xff1a; 格式化代码快捷键[中文配置]&#xff1a; 英文&#xff1a; 格式化代码快捷键[英文配置]&#xff1a;...

UOB大华银行|校招网申综合能力SHL测评题库英语版本真题分析

大华银行有限公司&#xff08;大华银行&#xff09;是亚洲银行业的翘楚&#xff0c;大华银行总部位于新加坡&#xff0c;并在中国、印度尼西亚、马来西亚、泰国及越南设立了全资法人银行&#xff0c;在全球拥有约500 间分行及办事处&#xff0c;分布在亚太、欧洲与北美的19 个国…...

Redis应用—2.在列表数据里的应用

大纲 1.基于数据库 缓存双写的分享贴功能 2.查询分享贴列表缓存时的延迟构建 3.分页列表惰性缓存方案如何节约内存 4.用户分享贴列表数据按页缓存实现精准过期控制 5.用户分享贴列表的分页缓存的异步更新 6.数据库与缓存的分页数据一致性方案 7.热门用户分享贴列表的分…...

【Linux基础】基本开发工具的使用

目录 一、编译器——gcc/g的使用 gcc/g的安装 gcc的安装&#xff1a; g的安装&#xff1a; gcc/g的基本使用 gcc的使用 g的使用 动态链接与静态链接 程序的翻译过程 1. 一个C/C程序的构建过程&#xff0c;程序从源代码到可执行文件必须经历四个阶段 2. 理解选项的含…...

C++ 中面向对象编程如何实现动态绑定?

在 C 中&#xff0c;面向对象编程的一个重要特性就是动态绑定。动态绑定允许在程序运行时根据对象的实际类型来决定调用哪个函数&#xff0c;这为程序的灵活性和可扩展性提供了强大的支持。本文将详细介绍 C 中面向对象编程如何实现动态绑定。 一、静态绑定与动态绑定的概念 静…...

电源芯片的SYNC引脚

-----本文简介----- 主要内容包括&#xff1a; ① 电源芯片的SYNC引脚 ----- 正文 ----- 先赞↓后看&#xff0c;养成习惯&#xff01; 1. SYNC引脚是什么&#xff1f; 电源芯片里面的SYNC引脚是 Synchronization clock in&#xff0c;意思是同步时钟输入。 2. SYNC引脚的作用…...