我想创建一个基于字典的SingleTon。一些简单的例子如:
singleton = SingleTon()
singleton['a'] = 5
print(singleton['a']) #5
我写了一个基本类:
class SingleTonNew():
_instance = None
def __new__(cls, *args, **kwargs):
id = threading.get_ident()
if cls._instance is None:
cls._instance = super(SingleTonNew, cls).__new__({})
return cls._instance
def __setattr__(self, key, value):
id = threading.get_ident()
if id in self._instance:
self._instance[id][key] = value
else:
self._instance[id] = {key:value}
def __getattr__(self, item):
id = threading.get_ident()
return self._instance[id][item]
但它不起作用,我该如何实施它。感谢所有回答问题的人。
class Singleton(dict):
def __new__(cls):
if not hasattr(cls, 'instance'):
cls.instance = super(Singleton, cls).__new__(cls)
return cls.instance
singleton1 = Singleton()
singleton2 = Singleton()
singleton1['a'] = 5
print(singleton1 is singleton2)
print(singleton2)
只需从dict
继承即可。
输出:
True
{'a': 5}
我这样实现:
class SingleTonNew(dict):
def __new__(cls):
ident = threading.get_ident()
if not hasattr(cls, 'instance'):
cls._instance = super(SingleTonNew, cls).__new__(cls)
if ident not in cls._instance:
cls._instance[ident] = super(SingleTonNew, cls).__new__(cls, ident)
return cls._instance[ident]
我现在不知道它是否正确,它是否线程安全?