我正在尝试使用来自collections模块的python deque,其中deque中的元素是自定义类实例。我想知道如何擦除/删除对象?如果可以,我可以使用诸如deque.remove(element)之类的内置方法吗?如何找到我的自定义对象?
class Buffer(object):
""" """
def __init__(self, name, size_total, size_in_cache):
self.name = name
self.size_total = size_total
class Storage(object):
"""
"""
def __init__(self, capacity):
self.CAPACITY = capacity
self.contents = collections.deque()
self.capacity_used = 0
def push_to_contents(self, buffer_name, buffer_size):
buf = Buffer(buffer_name, buffer_size)
self.contents.appendleft(buf)
def delete_from_contents(self, buffer_name)
""" HOW??
How can I use self.contents.remove() here>
"""
collections.deque.remove
的操作方式是将自变量与双端队列中的每个项目进行比较。如果找到与参数相等的东西,则将其删除。否则,它会引发一个ValueError
。
由于您已经实现了Buffer
对象,不知道如何与其他对象进行比较,因此Python默认(使用object
父类)比较id
值。
但是,如果要为您的类实现__eq__
方法,则可以完成所需的操作。
例如,
def __eq__(self, other):
if isinstance(other, Buffer):
return self.name == other.name and self.size_total == other.size_total
elif isinstance(other, str):
return self.name == other
else:
return NotImplemented
编辑:
如果您使用的是Python 3,这很好,也很好。在Python 2中,您还必须实现__ne__
(“不等于”)。可以很简单]
def __ne__(self, other):
return not self == other
Python 3会自动为您解决这个问题。