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

无限缓存类实例方法触发Pylint警告,求合理缓存实现方案

解决类实例方法单次执行缓存的Pylint警告问题

问题场景

现有如下代码,为类A的实例方法添加@cache装饰器实现无限缓存:

class A:
    @cache
    def extremely_long_and_expensive_function(self) -> None:
        # 必须访问self的一系列初始化指令
        pass

Pylint触发警告:

lru_cache(maxsize=None)' or 'cache' will keep all method args alive indefinitely, including 'self'pylint(method-cache-max-size-none)

需求是实现每个实例仅执行一次该方法,但不想用@cached_property(因为这是初始化命令,不是属性且无返回值),也不想写复杂的自定义实现,需要简洁可行的方案。

简洁解法

直接在方法内部通过实例属性标记执行状态,无需额外装饰器:

class A:
    def extremely_long_and_expensive_function(self) -> None:
        # 检查是否已执行过
        if hasattr(self, "_init_func_executed"):
            return
        
        # 这里放必须访问self的一系列初始化指令
        print("执行耗时操作...")
        
        # 标记为已执行
        self._init_func_executed = True

解法说明

  • 每个实例独立维护执行标记,确保同一实例方法仅执行一次
  • 完全避免了@cache装饰器缓存self导致的内存泄漏风险,不会触发Pylint警告
  • 代码极简,无外部依赖,符合需求中“简洁不复杂”的要求

内容的提问来源于stack exchange,提问作者Some Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:35:40