Python单例模式:实现缓存实例
在Python中,可以通过工厂函数和弱引用字典实现对象的缓存,确保相同参数创建的对象是同一个实例。
import weakref
class Spam:
def __init__(self, name):
self.name = name
_spam_cache = weakref.WeakValueDictionary()
def get_spam(name):
if name not in _spam_cache:
s = Spam(name)
_spam_cache[name] = s
else:
s = _spam_cache[name]
return s
a = get_spam('foo')
b = get_spam('bar')
print(a is b) # False
c = get_spam('foo')
print(a is c) # True
代码中,_spam_cache
使用 weakref.WeakValueDictionary()
创建,这是一个弱引用字典,可以避免缓存对象导致的内存泄漏。get_spam()
函数首先检查缓存中是否存在对应名称的对象,如果存在则直接返回缓存的实例,否则创建新实例并缓存。
2.26MB
文件大小:
评论区