web-dev-qa-db-fra.com

Remplacer l'opérateur 'in' de Python?

Si je crée ma propre classe en Python, quelle fonction devrais-je définir afin de permettre l'utilisation de l'opérateur "in", par exemple.

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...
167
astrofrog
215

Une réponse plus complète est:

class MyClass(object):

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

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

Ici, vous deviendrez vrai en demandant si 54 était en m:

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

Voir documentation sur la surcharge __contains__ .

167
pthulin

Vous voudrez peut-être aussi jeter un coup d'œil à la structure de substitution d'opérateur infixe que j'ai pu utiliser pour créer un langage spécifique à un domaine:

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

7
user250828