我知道python中有许多魔术方法会影响对象在某些情况下的行为方式(比如定义__cmp__(self, other)改变它与其他实例相比时的工作方式),但我想知道,有没有办法让改变在'in'运算符中如何调用对象的行为?
if thing in custom_object:
call_the_object_in_a_customized_way()
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
__contains__ 是你正在寻找的方法
从这个页面:
对于定义
__contains__()方法的用户定义类,x in y当且仅当y.__contains__(x)为true 时为true.对于不定义用户定义的类
__contains__(),但不限定__iter__(),x in y如果一些值为truez与x == z同时迭代产生y.如果在迭代期间引发异常,则就好像在异常中引发异常一样.最后,旧式迭代协议尝试:如果一个类定义
__getitem__(),x in y是真,当且仅当有一个非负整数索引i这样x == y[i],并且所有的整数索引不提高IndexError例外.(如果引发任何其他异常,那就好像在提出异常时).
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |