Python基本类-自函数不起作用



我已经学习python大约一周了,正在尝试设置一个基本的LRU缓存。

我想我不完全明白什么时候该在OOP中使用self命令。

我的代码的简化版本在这里:

class LRUCache:
def __init__(self):
self.cache=[]

def add_to_cache(self, cache, item_to_add):
pass

my_cache = LRUCache()
while True:
what_to_add = input("What do you want to add?")
my_cache.add_to_cache(self.cache, what_to_add)

我在self.cache的最后一行遇到一个错误,";未定义名称self";

我不太清楚为什么会这样——据我所知,my_cache是我的对象,它应该能够识别self.cache,并在add_to_cache函数中使用该属性。

我试着在这里和谷歌上搜索,但没能具体找到我做错了什么。

我感谢任何人对这种情况的帮助或澄清。我是一个初学者,仍在努力学习。非常感谢。

自表示调用方法的当前对象

如果你写my_cache.add_to_cache(self.cache, what_to_add)

my_cache得到"转置的";到您的def add_to_cache(self, cache, item_to_add):中的自我论证

想象一下有一个函数def test(self): print(self.name)执行my_object.test((对应于放置my_object而不是self,与执行测试(my_object(相同

然后它会调用my_object.name在你的情况下,你要么想做

my_cache.add_to_cache(my_cache.cache, what_to_add)

或者更好的是,既然你有self,就删除cache参数在你的功能中像一样使用它

def add_to_cache(self, item_to_add):
cache = self.cache

你会这样称呼它

my_cache.add_to_cache(what_to_add)

希望这是明确的

在python中为simmilar自用,目的是在java中使用这个关键字。因此,在这种情况下self.cache表示缓存列表属于my_cache对象。因此,通过这种方式,您不能访问类外的缓存列表,因为python不是您引用的对象。您必须将这个add_to_cache方法移动到类内部。那么它可能是这样的。

class LRU_cache:
def add_to_cache(self,what_to_add):
self.cache.add(what_to_add)

然后,您可以调用这个引用my_cache对象的方法。

my_cache.add_to_cache(what_to_add)

最新更新