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

面向对象编程:一切皆对象

面向对象(OOP)是一种编程范式,它使用''对象''来设计软件。对象可以包含数据和代码:数据代表对象的状态,而代码代表操作数据的方式。在面向对象编程中,一切皆对象,这意味着将现实世界事务使用类与实例来模拟,如灯,汽车,导弹,杯子,都可以用类和实例来模拟。

一 、类与实例

类是对现实世界描述的一种类型。它定义了一组具有相同属性和方法的对象的结构。类名通常使用大驼峰命名法,例如 ElectricCar

class ElectricCar:pass

类是抽象的,约定了未来实例应该有的内容,是实例的模板。

实例

实例是类的具现化。通过调用类来生成实例:

class ElectricCar:pass
my_car = ElectricCar()

实例是具体的,具有具体的数据。实例的内容依赖于类。

二、self

self 是类的一个特殊变量,用于代表未来的实例。在类的内部,self 用于访问类的属性和方法。

初始化函数

__init__ 是一个特殊的方法,称为构造器,用于初始化新创建的对象。

class ElectricCar:def __init__(self, make, model):self.make = makeself.model = model

 魔法函数

Python 提供了一系列特殊的方法,称为魔法函数,例如 __str____len__ 和比较方法 __eq__ 等。

# 内部编写所有魔法方法的使用案例
'''
以双下滑线开头和结尾的为魔法函数
__init__: 用于初始化对象。
__str__: 返回实例用字符串表示,自定义内容
__len__:当使用 len() 函数时调用,返回容器类型的长度。实例与实例之间也可以比较了
__eq__ :==触发
__ne__ :!=触发
__gt__ :>触发
__ge__ :>=触发
__lt__ :< 触发
__le__ :<=触发__add__ :+触发
__sub__ :-触发
__mul__ :*触发
__truediv:/触发
__floordiv__://触发
__mod__:%触发
__divmod__:div(x,y)触发
'''# class Myclass:
#     def __init__(self, name, age):
#         print('初始化函数执行了')
#         self.name = name
#         self.age = age
#
#     def __str__(self):
#         return f'姓名:{self.name},年龄:{self.age}'
#
#     def __len__(self):
#         return len(self.name)
#
#     def __gt__(self, other):
#         '''
#         用>来判断年龄大小
#         :param other:
#         :return:
#         '''
#         return self.age > other.age
#
#     def __lt__(self, other):
#         '''
#         用<来判断 年龄大小
#         :param other:
#         :return:
#         '''
#         return self.age < other.age
#
#     def __ge__(self, other):
#         '''
#         用>=来判断 年龄大小
#         :param other:
#         :return:
#         '''
#         return self.age >= other.age
#
#     def __le__(self, other):
#         '''
#         用<=来判断 年龄大小
#         :param other:
#         :return:
#         '''
#         return self.age <= other.age
#
#     def __eq__(self, other):
#         '''
#         判断两个实例age和name是否完全相等
#         :param other:
#         :return:
#         '''
#         return self.age == other.age and self.name == other.name
#
#     def __ne__(self, other):
#         '''
#         判断两个实例 age 或者 name 是否有一方不相等
#         :param other:
#         :return:
#         '''
#         return self.age != other.age or self.name != other.name
#
#     def __add__(self, other):
#         '''
#         返回两个实例的age相加
#         :param other:
#         :return:
#         '''
#         return self.age + other.age
#
#     def __mul__(self, other):
#         '''
#         返回两个实例的age乘积
#         :param other:
#         :return:
#         '''
#         return self.age * other.age
#
#     def __divmod__(self, other):
#         '''
#         先求除 再求余
#         :param other:
#         :return:
#         '''
#         return divmod(self.age, other.age)
#
#     def __mod__(self, other):
#         '''
#         返回两个实例的
#         :param other:
#         :return:
#         '''
#         return self.age % other.age
#
#
# mc = Myclass('亲亲亲', 18)
# print(mc)
# # __len__
# print(len(mc))
#
# mc2 = Myclass('顺子', 18)
# # __str__
# print(mc2)
# __gt__
# print(mc > mc2)
# # __lt__
# print(mc < mc2)
# # __ge__
# print(mc >= mc2)
# __le__
# print(mc <= mc2)
# __eq__
# print(mc == mc2)
# # __nq__
# print(mc != mc2)
# # __add__
# print(mc + mc2)
# # __mul__
# print(mc * mc2)
# __mod__
# print(mc % mc2)
# __divmod__
# print(divmod(mc, mc2))

构造函数与析构函数

构造函数用于创建实例,返回实例,通过父类来创建实例,super()._new()而析构函数在实例不再使用时执行,用于清理资源。

"""
构造函数:创建并且返回实例(self)
初始化函数: self已经创建完成,可以向self中添加数据
析构函数: 销毁实例 清理实例内存  实例不在使用则回收实例内存之前汇执行对应的析构函数
"""# class MyClass:
#     def __new__(cls, *args, **kwargs):
#         # 调用父类的new方法创建一个实例
#         instance = super().__new__(cls)
#         print(f"构造函数执行了", id(instance))
#         # 将创建好的实例返回 返回给初始化函数
#         return instances
#
#     def __init__(self, name):
#         print(f"初始化函数执行了", id(self))
#         self.name = name
#
#     def __del__(self):
#         print(f"析构函数执行了")
#
#
# mc1 = MyClass("阿拉伯")
# print(id(mc1), id(None), mc1 is None)
#
# mc1 = None
# print("程序执行完毕  将要退出")
# #  程序退出执行析构mc1class MyOpen:def __init__(self, filename, mode="r", encoding="utf8"):self.f = open(filename, mode=mode, encoding=encoding)def read_all(self):return self.f.read()def __del__(self):self.f.close()mo = MyOpen("./65.魔法函数.py")
print(mo.read_all())

三、三大特性

封装

封装是将数据(属性)和操作数据的方法组合在一起的过程。封装确保了数据的安全性,只能通过特定的方法来访问和修改。

# 装饰器:一个函数,用于增强或修改另一个函数的行为,通常通过返回一个新的函数来实现。
import random
import timedatas = [random.randint(0, 10000) for i in range(10000)]
# 通过浅拷贝 得到一模一样的列表
datas_copy = datas.copy()def time_cost(f):def calc():stat = time.time()f()print(f'{f}花费的时间开销为:{time.time() - stat}')return calc@time_cost
def my_fun1():datas.sort()print(datas)my_fun1()@time_cost
def my_fun2():new_list = sorted(datas_copy)print(new_list)my_fun2()import random
import timedatas = [random.randint(0, 10000) for i in range(10000)]
# 通过浅拷贝 得到一模一样的列表
datas_copy = datas.copy()def time_cost(f):def calc():stat = time.time()f()print(f'{f.__name__}花费的时间开销为:{time.time() - stat}')return calcdef fun1():datas.sort()print(datas)fun1 = time_cost(fun1)
fun1()  # 此时的fun1()不是fun1()而是calc()def fun2():new_list = sorted(datas_copy)print(new_list)fun2 = time_cost(fun2)
fun2()  # 此时的fun2()不是fun2()而是calc()

继承

继承允许新创建的类(子类)继承现有类(父类)的属性和方法。

  • __base__     :获取父类
  •  __bases__  :获取父类元组
  •  __class__   :返回实例对应的类
多继承

继承多个父类-java,c# 只支持单继承,通过接口等来实现多继承的功能,Python直接就可以有多个父类。

# 多继承 继承多个父类class SpeakAble:def __init__(self, la):self.la = ladef speak(self):return print(f'I can speak {self.la}')class SpeedAble:def __init__(self, speed):self.speed = speeddef move(self):print(f'Moving at a speed of {self.speed} km/h')class Person(SpeedAble, SpeakAble):def __init__(self, name, la, speed):self.name = nameSpeedAble.__init__(self, speed)SpeakAble.__init__(self, la)def __str__(self):return f'name: {self.name}, language: {self.la}, speed: {self.speed}'class ATM(Person):def __init__(self, name, speed, la, skill):super().__init__(name, la, speed)self.skill = skilldef show(self):return print(f'{self.name},{self.speed},{self.la},{self.skill}')def attack(self):print(f'{self.name} is attacking with a skill: {self.skill}')atmo = ATM('赛罗', 1000, '光环语言', '赛罗光纤')
atmo.show()
atmo.move()
atmo.speak()
atmo.attack()
# 多继承 mro : method(方法) retrieval(检索)  order(顺序)
# Python3 使用广度优先# print(ATM.mro())

多态

多态允许同一个接口接受不同的数据类型。在Python中,多态是隐式实现的,不需要显式定义。

# 同名不同参数# def my_fun(a):
#     print(a)
#
#
# def my_fun(a, b):
#     print(a, b)
#
#
# # 后一个的my_fun()覆盖掉了上方的my_fun
# my_fun(10, 2)# 在面向对象编程中,子类可以重写父类的方法,当调用子类实例的方法时,将执行子类中的方法定义。
class Animal:def walk(self, speed):print('walk')class Dog(Animal):def walk(self, speed):print('run')class Cat(Animal):def walk(self, speed):print('sheep')# 类似于多态!结果以元组的形式输出
def my_fun(*args):print(args)my_fun(10)
my_fun(10, 11)
my_fun(10, 11, 22)
my_fun(10, 11, 22, 33)

抽象类

抽象类是一种特殊的类,它不能被实例化,但可以包含抽象方法。子类继承抽象类时,必须实现这些抽象方法。

'''
抽象类是一种不能被实例化的类
'''from abc import ABC, abstractmethodclass Animal(ABC):'''通过装饰器abstractmethod把walk变为抽象方法'''@abstractmethoddef walk(self):passdef eat(self):print('可以吃')class Dog(Animal):def walk(self):print('dog can walk')class Cat(Animal):def walk(self):print('cat can walk')dog = Dog()
dog.walk()  # 输出: Woof!cat = Cat()
cat.walk()  # 输出: Meow!

四、类中内容

实例属性

向实例中添加的数据,可以通过类内 self 或类外实例来添加。

实例方法

第一个参数是 self 的方法,可以通过类内或类外实例来调用。

class Person:def __init__(self, name, sex):self.name = nameself.sex = sexdef set_name(self, name):self.name = namedef __str__(self):return f'类名:{self.name} 类别:{self.sex}'p = Person('泉', '男')
print(p)

类属性

类属性可以通过类名直接访问和设置。

class MyClass:# 类属性class_attribute = 'I am a class attribute'@classmethoddef class_method(cls):print(cls.class_attribute)@classmethoddef update_class_attribute(cls, new_value):cls.class_attribute = new_valueprint(MyClass.class_attribute)  # I am a class attributeMyClass.class_method()          # I am a class attribute

类方法

使用 @classmethod 装饰器的方法,第一个参数通常是 cls,表示类本身。

class MyClass:@classmethoddef class_method(cls):# cls 代表 MyClass 类print(f"这是 {cls} 的类方法")# 类方法可以通过类直接调用,也可以通过类的实例调用,但推荐通过类直接调用。MyClass.class_method()  # 推荐方式# 实例也可以调用类方法,但这不是推荐的做法
my_instance = MyClass()
my_instance.class_method()

静态方法

使用 @staticmethod 装饰器的方法,没有特殊的参数,通常用于辅助功能。

# 静态方法  不需要 self 或 cls 参数,不能访问类或实例的属性。
class GamePerson:@staticmethoddef play_name():pass@staticmethoddef play_age():pass@staticmethoddef play_sex():pass@staticmethoddef play_address():passGamePerson.play_name()
GamePerson.play_age()
GamePerson.play_address()
GamePerson.play_sex()

五、Python的灵活性

Python 是一种解释性语言,允许动态地向类中添加内容,包括属性、方法等。

数据的访问级别

在面向对象编程中,数据的访问级别(也称为访问修饰符)用于控制类成员(属性和方法)的可见性和可访问性。Python 没有像 Java 或 C++ 那样的严格访问级别,但是它遵循一些约定来模拟访问控制。以下是 Python 中常见的数据访问级别:

公有(Public)
  • 公有属性和方法没有特定的修饰符。它们可以直接从类的实例和类的外部访问。
  • 公有成员通常以小写字母开头,这是 Python 的惯例。
# 公有(Public)
class Car:def __init__(self, color):self.color = color  # 公有属性def start(self):    # 公有方法return f'The car starts.'print(car.start())
私有(Private)
  • 私有成员以双下划线 __ 开头。它们通常只在类内部使用,不可从类的外部直接访问。
  • Python 中的私有属性和方法实际上并不是真正的私有,它们可以通过_classname__attributename 的方式访问,但这是一种约定,表明这些成员不应该从外部访问。
    # 私有(Private)
    # 私有成员以双下划线 __ 开头。
    class Car:def __init__(self):  # 私有属性self.__max_spend = 200def get_max_spend(self):  # 公开私有属性的方法return self.__max_spendcar = Car()
    print(car.get_max_spend())
    保护(Protected)
    • 受保护的成员以单个下划线 _ 开头。它们可以在类本身和继承的子类中访问,但不应在类的外部访问。
    • 与私有成员一样,Python 中的受保护成员也不是真正的受保护,但遵循约定不应从外部访问。
      # 私有(Private)
      # 私有成员以双下划线 __ 开头。
      class Car:def __init__(self):  # 私有属性self.__max_spend = 200def get_max_spend(self):  # 公开私有属性的方法return self.__max_spend

六、属性封装 

使用 @property 装饰器可以创建只读属性,使用 @属性名.setter 可以定义设置属性值的方法。

上方的代码保护(Protected)_color 属性是一个受保护的成员,这意味着它按照惯例应该只在类内部或子类中访问。然而,由于 Python 的动态特性仍可以通过从类的外部访问和修改它。

为了更好地封装,可以使用属性装饰器 @property 来提供对属性的受控访问:

# 保护(Protected)
class Car:def __init__(self):self._color = 'red'  # 受保护的属性@propertydef color(self):# 只读属性,外部不能直接设置_color的值return self._color@color.setterdef color(self, new_color):# 可以在这里添加验证逻辑self._color = new_color# 使用 setter 方法修改颜色
car = Car()
car.color = 'yellow'  # 使用属性的方式调用 setter 方法
print(car.color)  # 使用属性的方式获取颜色,将输出 'yellow'

在这个修改后的版本中,color 是一个属性,提供了对 _color 的受控访问。外部代码应该使用 car.color 来获取和设置颜色值,而不是直接使用 car._color。这样,您可以在 color 的 setter 方法中添加验证逻辑,确保属性值的有效性。

单例类

单例类确保只有一个实例存在。它通过控制构造函数来实现这一点。

class Person:pass# 每次调用类都可以生成一个新的实例
p1 = Person()
p2 = Person()
p3 = Person()print(p1 is p2, p2 is p3, p3 is p1)class Manage(object):instance = Nonedef __new__(cls, *args, **kwargs):'''对构造函数进行控制 不是每次都生成新的实例1. 对类属性instance判断 如果为空 就构造一个实例 并且把实例赋予instance2. 对类属性instance判断 如果不为空 则直接把他返回'''if not Manage.instance:Manage.instance = super().__new__(cls)return Manage.instancedef __init__(self):print('初始化函数执行了')m1 = Manage()
m2 = Manage()
print(m1 is m2, m1 is None, m2 is None)

结论

面向对象编程是一种强大的范式,它通过类和实例的概念,提供了一种自然的方式来模拟现实世界中的事务。Python 的灵活性和动态特性使得OOP在Python中得以广泛应用。通过封装、继承和多态,OOP提高了代码的可重用性、灵活性和可维护性。

相关文章:

面向对象编程:一切皆对象

面向对象(OOP)是一种编程范式,它使用对象来设计软件。对象可以包含数据和代码&#xff1a;数据代表对象的状态&#xff0c;而代码代表操作数据的方式。在面向对象编程中&#xff0c;一切皆对象&#xff0c;这意味着将现实世界事务使用类与实例来模拟&#xff0c;如灯&#xff0…...

GIT版本管理与分支控制

目录 1、了解Git功能 2、第一次使用Git&#xff08;首次配置好&#xff0c;后续不用再操作&#xff09; 打开git后端 设置用户签名 结果 3、初始项目架构 创建本地新仓库并初始化 文件添加到本地仓库 a.文件添加缓存区 b.缓存区内容提交到本地仓库 c.改写提交的注释 …...

大模型算法备案流程最详细说明【流程+附件】

文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报…...

JAVA GUI 基本使用

package com.lu.gui;import javax.swing.*; import java.awt.*;public class MyJFrame extends JFrame {public MyJFrame() {this.setBackground(Color.BLACK);this.setResizable(false);this.setSize(500,500);this.setTitle("登录页面");} }package com.lu.gui;imp…...

【涵子来信】——AI革新:1.新时代是便捷的,要会用

各位读者朋友们&#xff1a; 我们现在AI时代的十字路口&#xff0c;AI是为生活带来便利的&#xff0c;我们要会使用AI。今天这篇文章来讲述一下AI的正确使用。 一、 AI的使用 1.1.便捷之中要会辨别 AI是带来强大的&#xff0c;利用好可以给生活带来便捷。 像之前WWDC24宣传…...

自定义线程池实现(一)

预期目标 1.实现一个相对完备的线程池 2.自定义拒绝策略&#xff08;下一节&#xff09; 线程池的基本参数 1.核心线程数 2.超时时间 3.拒绝策略&#xff08;在下一篇中添加&#xff09; 4.工作队列 5.任务队列 工作机制 当添加一个任务到线程池中时&#xff0c;线程池会…...

计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

基于springboot+vue+uniapp的校园快递平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

这两个大龄程序员,打算搞垮一个世界软件巨头!

大家都知道&#xff0c;Adobe是多媒体和数字内容创作者的绝对王者&#xff0c;它的旗下有众多大家耳熟能详的软件&#xff1a;Photoshop、Illustrator、Premiere Pro、After Effects、InDegign、Acrobat、Animate等等。 这些软件使用门槛很高&#xff0c;价格昂贵&#xff0c;安…...

LabVIEW放大器自动测量系统

开发了一个基于LabVIEW平台的多路前置放大器自动测量系统的开发与实施。该系统集成了硬件控制与软件编程&#xff0c;能够实现放大器各项性能指标的快速自动测量&#xff0c;有效提高了测试的精确性和效率。系统设计采用了虚拟仪器技术&#xff0c;结合了先进的测量与控制策略&…...

全面整理人工智能(AI)学习路线图及资源推荐

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习&#xff0c;从大模型训练到实际应用&#xff0c;AI技术的广度和深度不断拓展。作为一名AI学习者&#xff0c;面对浩瀚的知识海…...

react antd upload custom request处理多个文件上传

react antd upload custom request处理多个文件上传的问题 背景&#xff1a;第一次请求需要请求后端返回aws 一个link&#xff0c;再往link push文件&#xff0c;再调用另一个接口告诉后端已经上传成功&#xff0c;拿到返回值。 再把返回值传给业务api... 多文件上传一直是循环…...

ALB快速实现IPv4服务的负载均衡

阿里云应用型负载均衡ALB支持HTTP、HTTPS和QUIC协议&#xff0c;专门面向网络应用层&#xff0c;提供强大的业务处理能力。 为了实现IPv4服务的负载均衡&#xff0c;需要快速创建一个ALB实例&#xff0c;并将来自客户端的访问请求转发至后端服务器。 操作流程 第一步&#x…...

【LLM】-12-部署Langchain-Chatchat-0.3.x版本

目录 1、0.3与0.2的功能对比 2、0.3.x支持多种部署方式 2.3、源码安装 2.3.1、项目源码下载 2.3.2、创建conda环境 2.3.3、安装poetry 2.3.4、安装依赖库 2.3.5、项目初始化 2.3.6、配置文件 2.3.7、初始化知识库 2.3.7、启动服务 2.3.8、配置说明 2.3.8.1、basic_…...

优化网络接收缓存减少数据丢包

视频领域&#xff0c;网络udp数据丢包会引起视频解码花屏。 1、修订单个socket的缓冲区大小&#xff1a;通过setsockopt使用SO_RCVBUF来设置接收缓冲区&#xff0c;该参数在设置的时候不会与rmem_max进行对比校验&#xff0c;但是如果设置的大小超过rmem_max的话&#xff0c;则…...

数据透视——判别分析

文章目录 判别分析简介常用的判别分析方法距离判别贝叶斯判别线性判别分析&#xff08;LDA&#xff09;支持向量机&#xff08;SVM&#xff09;总结 补充 在数据科学的丰富领域中&#xff0c;判别分析扮演着至关重要的角色。它是一种统计方法&#xff0c;用于预测样本数据的类别…...

书生大模型学习笔记 - 连接云端开发机

申请InternStudio开发机&#xff1a; 这里进去报名参加实战营即可获取 书生大模型实战营 InternStudio平台 创建开发机 SSH连接开发机&#xff1a; SSH免密码登录 本地创建SSH密钥 ssh-keygen -t rsa打开以下文件获取公钥 ~/.ssh/id_rsa.pub去InternStudio添加公钥 …...

Python操作符的重载

目录 1、操作符重载的基本概念1.1、常用的操作符重载方法1.1.1、算术操作符1.1.2、比较操作符1.1.3、比其他操作符 1.2、例子 2、应用场景2.1、增强代码的可读性2.2、 实现类的数学运算2.3、支持自定义的数据结构2.4、简化 API 设计2.5、实现链式操作和流式接口 3、总结 Python…...

redis面试(三)Hash数据结构

HASH 哈希&#xff0c;在redis底层实现的时候&#xff0c;数据的结构叫做dict 这个Dict就是一个用于维护key和value映射关系的数据结构&#xff0c;与很多语言中的Map类型相似。 本质上也是一个数组链表的形式存在&#xff0c;不同的点在于&#xff0c;每个dict中是可以存在…...

Java基础语法

注释 注释就是在程序指定位置添加的说明性信息 简单理解&#xff0c;就是对代码的一种解释 注释有三种&#xff1a; 单行注释 格式&#xff1a;//注释信息 多行注释 格式&#xff1a;/*注释信息*/ 文档注释 格式&#xff1a;/**注释信息*/ 注释的注意事项…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...