python中使用两种方式实现单例模式

    技术2022-07-10  101

    #coding=utf8 import os import sys """ @author: xuwentao date: 2020.06.30 function: singleton model language:python3 """ """ 单例模式实现1: 使用类方法和类属性来实现 """ class Singleton(object): def __init__(self,*args,**kwargs): pass @classmethod def singleton(cls): # 把实例封装成私有属性 if not hasattr(Singleton, '_instance'): Singleton._instance = cls() # 这里也可以写Singleton() return Singleton._instance """ 单例模式实现2:使用python内部创建对象的机制 知识点:python创建对象的过程,在python实例化对象的时候,先会执行__new__(cls)的方法,为创建的对象开辟 一段新的内存,然后调用__init__来为这个新的对象执行初始化操作 所以在__new__时候需要保证每次开辟的对象都一样就可以 """ class Singleton1(object): def __init__(self): pass # 使用__new__保证每次返回的对象都一样 def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): Singleton1._instance = super().__new__(cls) return Singleton1._instance if __name__ == '__main__': a = Singleton.singleton() b = Singleton.singleton() """ <__main__.Singleton object at 0x7f690c029390> 140089149789072 <__main__.Singleton object at 0x7f690c029390> 140089149789072 是不是实现类单例1 """ print(a) print(id(a)) print(b) print(id(b)) c = Singleton1() d = Singleton1() """ <__main__.Singleton1 object at 0x7f40809a7908> <__main__.Singleton1 object at 0x7f40809a7908> 139915012241672 139915012241672 是不是实现了单例2 """ print(c) print(d) print(id(c)) print(id(d))
    Processed: 0.016, SQL: 9