我想编写一个函数def singleton_of(cls): ...
,该函数需要将实例存储在某个地方。
方法1:
按setattr(cls, ..., instance)
存储实例,但是某些内置类型无法setattr
。
方法2:
将实例存储在全局弱引用字典(Dict[Type, object]
)中,但是某些类型无法创建弱引用。
方法3:
将实例存储在全局字典(Dict[Type, object]
)中,但是某些类型不可散列,并且无法收集。
方法4:
将实例存储在全局列表(List[Tuple[Type, object]]
)中,但这具有糟糕的查询性能,并且无法收集。
方法5:
从后备方式1到方式4一对一。
方法6:
将实例存储在闭包中(例如在cls上使用装饰器),但这需要在调用singleton_of
之前创建闭包,我不喜欢它。
事实上,我正在编写一个应该能够存储任何类型的元数据的库。
还有其他选择吗?