Python类中self关键字报错:未定义名称self问题求助
问题分析与修正
你遇到的错误根源在于对Python中self关键字的使用场景理解有误:
self是类的实例方法内部的专用参数,用来指代当前调用方法的实例对象,只能在类定义的方法里使用。- 在类外部(比如你的while循环里),并没有
self这个变量,直接用self.cache自然会报“undefined name self”的错误。
你的代码存在两个关键问题:
add_to_cache方法不需要额外接收cache参数——你已经在__init__里给实例绑定了self.cache属性,方法内部直接通过self.cache就能访问这个缓存列表。- 调用
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
相关产品推荐
相关产品推荐

