- def singleton(cls):
- _instance = {}
-
- def inner():
- if cls not in _instance:
- _instance[cls] = cls()
- return _instance[cls]
- return inner
-
- @singleton
- class Demo(object):
- def __init__(self):
- pass
-
- def test():
- b1 = Demo()
- b2 = Demo()
- print(b1, b2)
- class single1:
- def __init__(self, cls):
- self.cls = cls
- self.cls.instance = None
-
- def __call__(self, *args, **kwargs):
- if not self.cls.instance:
- self.cls.instance = self.cls(*args, **kwargs)
- return self.cls.instance
-
- @single1
- class Demo:
- def test(self):
- print("hello world")
-
- def test():
- b1 = Demo()
- b2 = Demo()
- print(b1, b2)
- import threading
-
- class Demo(object):
- _instance_lock = threading.Lock()
-
- def __init__(self):
- pass
-
-
- def __new__(cls, *args, **kwargs):
- if not hasattr(Demo, "_instance"):
- with Demo._instance_lock:
- if not hasattr(Demo, "_instance"):
- Demo._instance = object.__new__(cls)
- return Demo._instance
-
- def test():
- b1 = Demo()
- b2 = Demo()
- print(b1, b2)
打印结果显示b1和b2的地址一致: