我希望能够创建一个由我定义的对象列表,并使用
以下是一个带有注释的最简示例:
更新:感谢 @user2357112 的帮助,看起来答案是实现等价运算符
in
关键字(调用 __contains__
)来确定该对象是否存在于Python列表中。以下是一个带有注释的最简示例:
>>> class Foo(object):
... def __init__(self, name):
... self.name = name
... def __contains__(self, item):
... return self.name == item
...
>>> list_of_objects = [Foo("bar"), Foo("baz"), Foo("quux")]
>>> # I want to see if "bar" is in this list of Foo() objects
>>> Foo("bar") in list_of_objects
False # <-- I want this to be True
in
关键字应该在 Python 列表上遍历,并使用 __contains__
方法来确定对象是否存在,这样才对。如果调用列表的 index()
函数,可以获得额外的赞誉。更新:感谢 @user2357112 的帮助,看起来答案是实现等价运算符
__eq__
。在前面示例中的 Foo
类中添加以下代码即可解决我遇到的问题。>>> class Foo(object):
... def __init__(self, name):
... self.name = name
... def __eq__(self, other):
... return other.name == self.name
>>> list_of_objects = [Foo("bar"), Foo("baz"), Foo("quux")]
>>> Foo("bar") in list_of_objects
True
"bar" in list_of_objects
时,会调用list.__contains__
。它绝不应该调用Foo.__contains__
,仅仅因为列表包含Foo
实例,而且不清楚你为什么认为它应该这样做。 - Vincent Savardlist.__contains__
?显然这是一个不好的主意... - Nathan McCoy