单例模式

单例模式

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

使用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 @ 2025-02-02 22:51  且任荣枯  阅读(18)  评论(0)    收藏  举报