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

Python类中self关键字报错:未定义名称self问题求助

问题分析与修正

你遇到的错误根源在于对Python中self关键字的使用场景理解有误:

  • self是类的实例方法内部的专用参数,用来指代当前调用方法的实例对象,只能在类定义的方法里使用。
  • 在类外部(比如你的while循环里),并没有self这个变量,直接用self.cache自然会报“undefined name self”的错误。

你的代码存在两个关键问题:

  1. add_to_cache方法不需要额外接收cache参数——你已经在__init__里给实例绑定了self.cache属性,方法内部直接通过self.cache就能访问这个缓存列表。
  2. 调用my_cache.add_to_cache时,不需要传self.cache——Python会自动把my_cache这个实例作为第一个参数(也就是方法里的self)传入,你只需要传要添加的元素即可。

修正后的代码如下:

class LRUCache:
    def __init__(self):
        self.cache = []
    
    def add_to_cache(self, item_to_add):
        # 直接操作实例的缓存列表
        self.cache.append(item_to_add)
        # 补充LRU核心逻辑示例:缓存满时淘汰最久未使用的元素(假设列表头部是最久未使用)
        if len(self.cache) > 3:
            self.cache.pop(0)
    
my_cache = LRUCache()

while True:
    what_to_add = input("What do you want to add?")
    # 仅传递要添加的元素
    my_cache.add_to_cache(what_to_add)
    # 打印缓存状态方便调试
    print(f"当前缓存内容: {my_cache.cache}")

补充一个关键知识点:当你调用my_cache.add_to_cache(what_to_add)时,Python会自动将其转换为LRUCache.add_to_cache(my_cache, what_to_add)——方法里的self就等同于my_cache,所以self.cache就是my_cache.cache,这也是方法内部能通过self访问实例属性的核心原因。

内容的提问来源于stack exchange,提问作者713sean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:16:21