Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用“uuu包含”搜索Python列表中的对象;在;关键词?_Python_List_Contains - Fatal编程技术网

如何使用“uuu包含”搜索Python列表中的对象;在;关键词?

如何使用“uuu包含”搜索Python列表中的对象;在;关键词?,python,list,contains,Python,List,Contains,我想创建一个我定义的对象列表,然后使用in关键字(whichcalls)来确定Python列表中是否存在所述对象 下面是一个带有注释的最小示例: >>> class Foo(object): ... def __init__(self, name): ... self.name = name ... def __contains__(self, item): ... return self.name == item

我想创建一个我定义的对象列表,然后使用
in
关键字(whichcalls)来确定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

\uuuuu contains\uuuu
是在容器上而不是在元素上调用的方法。您需要实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu

class Foo(object):
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        if isinstance(other, Foo):
            return other.name == self.name
        return self.name == other

如果要将
Foo
存储在其他容器中(如
set
),请记住在对象列表中执行
时实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

,然后调用
列表。它不会也绝对不应该调用
Foo.\uuu包含\uuu
,仅仅因为列表包含
Foo
实例,并且不清楚您为什么认为应该这样。这是可以理解的,但问题仍然是,如何才能做到?覆盖
列表。\uuu包含\uuuuu
?,这显然是一个坏主意…当你在做的时候,你还应该定义
\uuu新的\uuuu
,或者
==
=将彼此不一致。如果对象是可变的,则不应定义
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,而应设置
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。无论您是否计划使用
,都应该处理这些事情=、设置或记录,因为现在获取这些对象要比尝试调试那些疯狂的事情容易得多,如果您忘记了自己没有处理任何这些事情,那么以后将发生这些事情。这是正确的答案,
中的
操作符在迭代列表时使用
\uuueq\uuuuuu
。我将此添加到代码中,效果很好。谢谢。@user2357112实际上,这适用于Python 2。在Python3中,
\uuuu ne\uuuuuu
将反转
\uuuuu eq\uuuuu
,并使用
\uuuu eq\uuuuuu
对象,但如果没有
\uuu hash\uuuuuu
则不可哈希。@bereal:是的,这些都是Python3的好功能。不过,在这个问题上,Python 3并没有什么特别之处。
class Foo(object):
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        if isinstance(other, Foo):
            return other.name == self.name
        return self.name == other