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() 函数首先检查缓存中是否存在对应名称的对象,如果存在则直接返回缓存的实例,否则创建新实例并缓存。

pdf 文件大小:2.26MB