单例模式

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点

使用new方法

class Singleton:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "_instance"):
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

class Myclass(Singleton):
    def __init__(self, a):
        self.a = a

a = Myclass(10)
b = Myclass(20)
print(a.a)
print(b.a)
print(id(a),id(b))
# 20
# 20
# 2472684130160 2472684130160

装饰器版本

def singleton(cls, *args, **kw):
    instances = {}

    def getinstance():
        if cls not in instances:
            instances[cls] = cls(*args, **kw)
        return instances[cls]

    return getinstance


@singleton
class Myclass:
    pass

a = Myclass()
b = Myclass()
print(a,b)
# <__main__.Myclass object at 0x000001FBBF007E20> <__main__.Myclass object at 0x000001FBBF007E20>

import方法

# mysingleton.py
class My_Singleton(object):
    def foo(self):
        pass
 
my_singleton = My_Singleton()
 
# to use
from mysingleton import my_singleton
 
my_singleton.foo()
posted @   且任荣枯  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇
点击右上角即可分享
微信分享提示