单例模式

单例模式是一种设计模式

单例模式:整个过程中只有一个实例,所有生成分实例都指向同一块内存空间

方式一:通过类的绑定方法

当用户输入端口和地址,实例化产生新对象
当用户输入端口和地址,每次拿到的对象,是同一个

class Single:
    _single_model = None

    def __init__(self, port, host):
        self.port = port
        self.host = host

    @classmethod
    def single_cls(cls):
        import settings

        if not cls._single_model:
            cls._single_model = cls(settings.PORT, settings.HOST)
        return cls._single_model

# 拿到的对象会是同一个
s = Single.single_cls()
s2 = Single.single_cls()
print(s)
print(s2)

第二种:通过装饰器来实现

def get_siggle(cls):
    siggle = None
    
    def wrapper(*args, **kwargs):
        if len(args) != 0 or len(kwargs) != 0:
            res = cls(*args, **kwargs)
            return res
        else:
            import settings
            nonlocal siggle
            if not siggle:
                siggle = cls(settings.PORT, settings.HOST)
            return siggle

    return wrapper

@get_siggle
class Single:

    def __init__(self, port, host):
        self.port = port
        self.host = host

s1 = Single()
s2 = Single()
print(s1)
print(s2)

第三种:通过元类

posted @ 2023-10-30 11:22  hanyingshuo  阅读(19)  评论(0)    收藏  举报