# -*- coding: utf-8 -*- from threading import RLock single_lock = RLock() def Singleton(cls): instance = {} def _singleton_wrapper(*args, **kargs): with single_lock: if cls not in instance: instance[cls] = cls(*args, **kargs) return instance[cls] return _singleton_wrapper @Singleton class SingletonTest(object): def __init__(self, name): self.name = name slt_1 = SingletonTest('第1次创建') print(slt_1.name) slt_2 = SingletonTest('第2次创建') print(slt_1.name, slt_2.name) print(slt_1 is slt_2)