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

时间:2012-02-24 09:35:12

标签: python python-3.x adt

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

if foo in liste_adt

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

谢谢,

2 个答案:

答案 0 :(得分:11)

您在寻找__contains__吗?

  

object.__contains__(self, item)

     
    

被调用以实现成员资格测试运营商。如果 item self中,则返回true,否则返回 false。对于映射对象,这应该考虑映射的键而不是值或键 - 项对。

         

对于未定义__contains__()的对象,成员资格测试首先通过__iter__()尝试迭代,然后通过__getitem__()尝试旧的序列迭代协议,请参阅this section in the language reference。< / p>   

快速举例:

>>> 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

注意:通常,当您遇到此类疑问时,可以在Data ModelThe Python Language Reference部分找到引用。

答案 1 :(得分:1)

由于数据结构是链表,因此有必要对其进行迭代以检查成员资格。实施__iter__()方法会使if infor in都有效。如果有更有效的方法来检查成员资格,请在__contains__()

中实施