В python 2.7 вы можете заставить супер метод __contains__ принимать 3 аргумента? - PullRequest
0 голосов
/ 08 мая 2018

Я хочу заставить супер метод содержать работать немного по-другому.

Я хочу сделать так, чтобы вы могли дать ему два целых числа. И если первое целое число меньше экземпляра класса, а второе целое больше экземпляра класса, то он вернет 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)

Как видите, я даже не знаю, как бы я сделал 3 аргумента для метода содержит . Но для примера, попробуйте просто проверить, находится ли 5 ​​между 1 и 7.

Я знаю, что могу сделать это способом, который могу сделать сам, но я хочу работать с ключевым словом in .

1 Ответ

0 голосов
/ 08 мая 2018

Если вам нужен какой-то 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)

Это не имеет особого смысла, но это выполнимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...