无限缓存类实例方法触发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
相关产品推荐
相关产品推荐

