如何设计Python类,使相同字符串构造参数返回同一实例、不同参数返回不同实例?
Python类同参数返回同一实例的实现方案
你要的效果可以通过重写类的__new__方法结合实例缓存实现,本质是应用享元模式复用相同参数的实例:
核心实现代码
class C: # 类级别缓存,key为构造函数接收的字符串参数,value为对应实例 _instance_cache = {} def __new__(cls, input_str: str): # 实例创建前先查缓存 if input_str not in cls._instance_cache: # 无缓存则创建新实例并存入缓存 cls._instance_cache[input_str] = super().__new__(cls) # 直接返回缓存中的实例 return cls._instance_cache[input_str] def __init__(self, input_str: str): # 你的初始化逻辑,注意重复返回缓存实例时__init__仍会执行 self.input_str = input_str
效果验证
运行你给出的测试代码:
x = C('a') y = C('b') z = C('a') print(x is y) # 输出 False print(x is z) # 输出 True
完全满足你要求的判断条件。
可选优化项
- 如果你的
__init__包含高开销的初始化逻辑,不想重复执行,可以给实例加初始化标记:在__init__开头判断实例是否已有_initialized属性,有就直接返回,初始化完成后给实例设置_initialized = True即可 - 如果需要控制缓存容量、清理过期实例,可以自己扩展
_instance_cache的管理逻辑,比如用LRU缓存替代普通字典
内容的提问来源于stack exchange,提问作者yair koskas
相关产品推荐
相关产品推荐

