首页 > 解决方案 > 在 python 2.7 中,你可以让 __contains__ 超级方法接受 3 个参数吗?

问题描述

我想让 super 方法包​​含一些不同的工作。

我想做它,这样你就可以给它一个两个整数。而如果第一个整数小于类的实例,而第二个整数大于类的实例,则返回True。这是我的尝试。

class test(object):
    def __init__(self, item):
        self.item= item
    def __contains__(self,other1,other2):
        if other1<self.item<other2:
            return True
        else:
            return False

x=test(5)

print 1 in x 

我收到这个错误

TypeError: __contains__() takes exactly 3 arguments (2 given)

如您所见,我什至不知道如何为contains方法执行 3 个参数。但是为了举例,我尝试检查 5 是否在 1 和 7 之间。

我知道我可以用我自己制作的方法来做到这一点,但我想使用in关键字。

标签: pythonpython-2.7

解决方案


如果您想要某种 3 参数in运算符,则必须构建自己的深度修改的 Python 解释器,包括重写基本语法规则。

不过,您可以轻松地获取一个元组:

class Blah(object):
    def __init__(self, val):
        self.val = val
    def __contains__(self, l):
        a, b = l
        return a < self.val < b

print (1, 3) in Blah(2)

这没有多大意义,但它是可行的。


推荐阅读