Python“;“魔术法”;用于自定义in运算符的行为
我知道python中有许多神奇的方法可以影响对象在某些情况下的行为方式(比如定义Python“;“魔术法”;用于自定义in运算符的行为,python,methods,Python,Methods,我知道python中有许多神奇的方法可以影响对象在某些情况下的行为方式(比如定义\uuu cmp\uuu(self,other)来改变它与自身的另一个实例相比的工作方式),但我想知道,有没有办法改变在“in”操作符中调用对象的方式 if thing in custom_object: call_the_object_in_a_customized_way() 有什么方法可以做到这一点吗?是您正在寻找的方法 发件人: 对于定义\uuuu contains\uuuu()方法的用户定义类,y
\uuu cmp\uuu(self,other)
来改变它与自身的另一个实例相比的工作方式),但我想知道,有没有办法改变在“in”操作符中调用对象的方式
if thing in custom_object:
call_the_object_in_a_customized_way()
有什么方法可以做到这一点吗?是您正在寻找的方法
发件人:
对于定义\uuuu contains\uuuu()方法的用户定义类,y中的x
当且仅当y时为真
对于不定义的用户定义类,它包含,但包含
定义\uu iter\uu()
,如果使用x==z
的某个值z
为
在y
上迭代时生成。如果在测试过程中引发异常
迭代,就好像在中引发了那个异常
最后,尝试旧式的迭代协议:如果类定义
\uuu getitem\uuu()
,y中的x
为真,当且仅当存在一个非负整数索引i
,使得x==y[i]
,且所有较低的整数索引都为真
未引发索引器异常。(如果提出任何其他例外情况,则
就好像提出了那个例外)
为此定义函数。当您在
操作符中使用时会调用它
演示:
谢谢,这帮了大忙!
>>> class Test:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def __contains__(self, item):
return item in (self.a, self.c)
>>> a = Test(1, 2, 3)
>>> 1 in a
True
>>> 3 in a
True
>>> 2 in a
False