algN/test/设计模式/单例/demo3.py

29 lines
580 B
Python

# -*- 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)