问题
当创建类实例时我们想返回一个缓存引用,让其指向上一个用同样参数(如果有的话)创建出来的类实例。
这个问题常常出现在当我们想确保针对一组输入参数只会有一个类实例存在时。
解决方法:
使用一个与类本身相分离的工厂函数:
class Spam: def __init__(self, name): self.name = name import weakref _spam_cache = weakref.WeakValueDictionary() def get_spam(name): if name in _spam_cache: s = _spam_cache[name] elif name not in _spam_cache: s = Spam(name) _spam_cache[name] = s return s a = get_spam("ioc") b = get_spam("aop") print(a is b) c = get_spam("aop") print(b is c)
运行结果:
False
True
注:弱引用介绍链接 http://python.jobbole.com/85431/