Переопределить оператор Python 'in'? - PullRequest
161 голосов
/ 07 февраля 2010

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

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...

Ответы [ 3 ]

211 голосов
/ 07 февраля 2010
161 голосов
/ 08 февраля 2010

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

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 = MyClass()
>>> 54 in m
True  

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

7 голосов
/ 09 февраля 2010

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

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

...