重新声明一个类中"in"的方法

lpo*_*ula 4 python adt python-3.x

我正在创建一个抽象数据类型,它创建一个双向链表(不确定它是正确的翻译).在其中我创建了一个方法__len__以正确的方式计算它的长度,一个方法__repr__来正确地表示它,但我现在不想创建一个方法,当用户将使用以下内容时:

if foo in liste_adt
Run Code Online (Sandbox Code Playgroud)

将返回正确的答案,但我不知道该使用什么,因为__in__不起作用.

谢谢,

Rik*_*ggi 11

你在找__contains__

object.__contains__(self, item)

被称为实施会员测试运营商.如果itemself中,则返回true ,否则返回false.对于映射对象,这应该考虑映射的键而不是值或键 - 项对.

对于未定义的对象,__contains__()成员资格测试首先尝试迭代__iter__(),然后是旧的序列迭代协议__getitem__(),请参阅语言参考中的此部分.

快速举例:

>>> class Bar:
...     def __init__(self, iterable):
...         self.list = list(iterable)
...     def __contains__(self, item):
...         return item in self.list
>>>     
>>> b = Bar([1,2,3])
>>> b.list
[1, 2, 3]
>>> 4 in b
False
>>> 2 in b
True
Run Code Online (Sandbox Code Playgroud)

注意:通常当您遇到这种疑问时,可以在The Python Language ReferenceData Model部分找到引用.