最近学习单例以及继承,写了一个以混入方式实现单例,代码如下:
class Singleton_MiXin:
'''混入方式继承单例,部分无效'''
_lock = Lock()
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
with cls._lock:
if not hasattr(cls, "_instance"):
cls._instance = super().__new__(cls)
return cls._instance
if __name__ == "__main__":
class sss:
def __init__(self, string, age=12):
self.name = string
self.age = age
class sample(sss, Singleton_MiXin):
pass
aa = sample('张三')
print(aa.__dict__)
bb = sample('李四', 28)
print(aa is bb, id(aa), id(bb))
print(aa.__dict__, bb.__dict__)
print(sample.__mro__)
输出:
{'name': '张三', 'age': 12}
True 2776903597648 2776903597648
{'name': '李四', 'age': 28} {'name': '李四', 'age': 28}
(<class '__main__.sample'>, <class '__main__.sss'>, <class '__main__.Singleton_MiXin'>, <class 'object'>)
可以看出两个实例ID一致,is 判断为真,第二个实例创建后,第一个实例属性同步变化。
此方式在thread继承类试验有效,但QThread无效,原因不明。。
算是原创吧,随意转载
本文探讨了使用混入方式实现单例模式的方法,并通过具体代码示例展示了其工作原理。作者创建了一个混入类,使普通类能够具备单例特性,实现在多线程环境下的唯一实例化。
2322

被折叠的 条评论
为什么被折叠?



