如何解决当我尝试从列表中删除对象时,它从不告诉我已找到它
当我尝试从列表中删除对象时,它永远找不到它,并告诉我该名称不在列表中。我尝试获取self._entitiesList[i]
的标题和实体的标题,但是我还没有找到一种方法。我在python 3.8中工作。该类具有4个属性:标题,艺术家,流派和时长。
存储库:
def __init__(self):
self._entitiesList = []
def find_position(self,entity):
"""
Function that returns the position of an entity
:param entity: (object) given entity
:return: (int) position of entity,-1 if not found
"""
for i in range(len(self._entitiesList)):
if self._entitiesList[i] == entity:
return i
return -1
def delete(self,entity):
"""
Function that deletes a given entity
:raise Exception: if entity does not exists
:param entity: (object) given entity
"""
position = self.find_position(entity)
if position == -1:
raise Exception("Does not exist!")
del self._entitiesList[position]
服务:
def delete_song(self,title,artist,genre,):
"""
Function that deletes a song by title
:param title: (str) song title
"""
self._music_repository.delete(Music(title,float(0)))
对于控制台:
def __delete_song(self):
title = input("Title: ")
self.__music_service.delete_song(title)
解决方法
您正在创建一个新的Music
对象,该对象将传递给self._music_repository.delete
,因为该对象刚刚创建,所以该对象当然不存在。
比较自定义对象时(与if self._entities_list[i] == entity
一样),可能会发生两种情况(按以下顺序):
- 它调用
if self._entities_list[i].__eq__(entity)
。 - 它调用
if self._entities_list[i] is entity
。
由于您尚未定义比较方法def __eq__(self,other)
,因此python将执行第二个选项并检查身份。身份与平等不相同。
在Music
上定义比较方法,您应该可以比较相等。
def __eq__(self,other):
if self.title == other.title and self.artist == other.artist:
return True
else:
return False
我选择说具有相同标题和相同艺术家的音乐是平等的,但是您必须根据自己的感觉定义逻辑。
在我的回答中,我将您的self._entitiesList
替换为self._entities_list
。 始终与您的命名保持一致,除非您有充分的理由不这样做,否则请尝试遵循PEP8 naming convention。
要扩大身份和平等之间的区别,请考虑以下几点:
a = ['hello']
b = ['hello']
c = a
此处,a
和b
相等,但具有不同的标识,而a
和c
相同,具有相同的标识。换句话说:
a is b # False
a is c # True
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。