单例模式
单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点
使用new方法
class Singleton:
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
class Myclass(Singleton):
def __init__(self, a):
self.a = a
a = Myclass(10)
b = Myclass(20)
print(a.a)
print(b.a)
print(id(a),id(b))
# 20
# 20
# 2472684130160 2472684130160
装饰器版本
def singleton(cls, *args, **kw):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return getinstance
@singleton
class Myclass:
pass
a = Myclass()
b = Myclass()
print(a,b)
# <__main__.Myclass object at 0x000001FBBF007E20> <__main__.Myclass object at 0x000001FBBF007E20>
import方法
# mysingleton.py
class My_Singleton(object):
def foo(self):
pass
my_singleton = My_Singleton()
# to use
from mysingleton import my_singleton
my_singleton.foo()

浙公网安备 33010602011771号