You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设计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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:30:04