python - 为类的每个实例创建一个单例
问题描述
我有一个 python 类,我们称它为 C。它的构造函数中有一个字符串。我怎么能确保(设计方面)
x = C('a')
y = C('b')
z = C('a')
这种配置导致x和y指向不同的地方,而x和z指向同一个地方?意义
x is y == False
x is z == True
解决方案
您可以使用WeakValueDictionary将类的所有现有实例保存在类上类似对象的字典中。在该__new__
方法中,您在 dict 中查找现有对象,如果存在则返回它,如果不存在则创建一个新实例并将其保存到 dict
from weakref import WeakValueDictionary
class C:
__instances = WeakValueDictionary()
def __new__(cls, value):
obj = cls.__instances.get(value)
if not obj:
obj = object.__new__(cls)
cls.__instances[value] = obj
return obj
def __init__(self, value):
self.value = value
我们对实例使用弱引用,以便在没有其他对象引用它们时对它们进行垃圾回收。
推荐阅读
- javascript - JavaScript Discord Bot 更新频道名称
- python - How to setup different Python interpreters on Sublime Text with SFTP and local?
- java - 在链表中查找节点并返回索引
- powerbi - Power BI 前 N 个底部的结果太多
- python - 如何使用坐标数据从矩阵中找到最大的元素?
- python - Pandas:按索引在多索引数据帧之上添加单个索引数据帧
- javascript - 保持函数的变量和函数本身的区别
- c# - 列表
与列表 ,哪个会更快? - javascript - 修改vue组件方法
- excel - 如何计算在 Excel 中匹配或超过值所需的天数