当前位置: 代码迷 >> 综合 >> Python Mixin 混入方式实现单例
  详细解决方案

Python Mixin 混入方式实现单例

热度:24   发布时间:2024-01-12 21:47:07.0

 

最近学习单例以及继承,写了一个以混入方式实现单例,代码如下:


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._instanceif __name__ == "__main__":class sss:def __init__(self, string, age=12):self.name = stringself.age = ageclass sample(sss, Singleton_MiXin):passaa = 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无效,原因不明。。

算是原创吧,随意转载