Python实现单例模式的三种方式

目录

一、类变量实现单例

二、装饰器实现单例

三、元类(Metaclass)实现单例


一、类变量实现单例

class Singleton:
    _instance = None  # 类变量,保存唯一的实例

    # __new__ 方法用于控制对象的创建过程,在此方法中检查 _instance 是否为 None,如果是,则创建并返回实例;否则,直接返回已有实例。
    def __new__(self, *args, **kwargs):
        if not self._instance:
            self._instance = super().__new__(self)
        return self._instance


# 测试
singleton1 = Singleton()
singleton2 = Singleton()

print(singleton1 is singleton2)  # True,两个实例是同一个

二、装饰器实现单例

# 装饰器 singleton 会缓存类实例,并在第一次实例化时创建唯一实例,之后的调用都会返回这个实例。
def singleton(cls):
    instances = {}
    def wrapper(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return wrapper

@singleton
class Singleton:
    def __init__(self):
        pass

# 测试
singleton1 = Singleton()
singleton2 = Singleton()

print(singleton1 is singleton2)  # True

三、元类(Metaclass)实现单例

class MyType(type):

	def __init__(self, name, bases, attrs):
		super().__init__(name, bases, attrs)
		self.instance = None

	def __call__(self, *args, **kwargs):
		if not self.instance:
			self.__init__(self.instance, *args, **kwargs)
		return self.instance


class Singleton(object, metaclass=MyType):
	pass

class Foo(Singleton):
	pass

v1 = Foo()
v2 = Foo()

print(v1 == v2)
内容概要:本文围绕RK3588芯片的CAN总线调试,系统讲解了基于Linux内核SocketCAN子系统的配置流程与错误帧分析方法。文章首先介绍RK3588芯片与CAN总线在工业自动化和汽车电子中的重要性,随后详细阐述SocketCAN的环境搭建、设备树与内核配置、接口参数设置及功能验证全过程,并深入解析CAN总线错误帧的结构、型及其产生原因。结合实战案,展示了如何利用candump、cansend、CAN分析仪和示波器等工具进行错误排查,特别指出RK3588原生CAN控制器在处理扩展帧和CRC校验时存在的硬件缺陷,并提出采用SPI转CAN控制器(如MCP2518FD)作为可靠替代方案。最后通过实际项目案总结调试经验,强调软硬件协同优化的重要性。; 适合人群:具备嵌入式Linux开发基础,熟悉CAN通信协议,从事工业控制、汽车电子或物联网相关工作的1-3年经验研发人员; 使用场景及目标:①掌握RK3588平台下SocketCAN的完整配置与调试流程;②学会使用标准工具验证CAN通信功能并分析错误帧;③应对RK3588原生CAN控制器缺陷,设计高可靠CAN通信方案; 阅读建议:此资源以实战为导向,建议读者结合开发板动手实践,重点理解设备树配置、内核编译、命令行工具使用及错误排查逻辑,同时关注硬件设计与电气特性对通信稳定性的影响,全面提升CAN总线系统级调试能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Calvad0s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值