Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Переопределить оператор Python "in"?

Автор вопроса: astrofrogОтветов: 3

Если я создаю свой собственный класс в Python, какую функцию я должен определить, чтобы разрешить использование оператора "in", например.

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...
  • На самом деле я искал, как переопределить операторы is и is not. Как query = tinydb.Query().field == value, чтобы также иметь возможность писать Query().field is not None. Но, похоже, пока что у меня остались __eq__ и __ne__, что приводит к непифоническому Query().field != None. (сарк) Tomasz Gandor 13.06.2017

pythonoperatorsoperator-overloadingin-operator

Ответы

Ответ 1 · рейтинг 296 · Ignacio Vazquez-Abrams

MyClass.__contains__(self, item)

Ответ 2 · рейтинг 231 · pthulin

Более полный ответ:

class MyClass(object):

    def __init__(self):
        self.numbers = [1,2,3,4,54]

    def __contains__(self, key):
        return key in self.numbers

Здесь вы получите True, если спросите, было ли 54 в m:

>>> m = MyClass()
>>> 54 in m
True

См. документацию по перегрузке __contains__.

Ответ 3 · рейтинг 7 · user250828

Вы также можете взглянуть на структуру переопределения инфиксных операторов, которую я смог использовать для создания предметно-ориентированного языка:

http://code.activestate.com/recipes/384122/

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы