2010-02-07 13 views
131

Si estoy creando mi propia clase en Python, ¿qué función debo definir para permitir el uso del operador 'in', p.¿Invalidar el operador 'in' de Python?

class MyClass(object): 
    ... 

m = MyClass() 

if 54 in m: 
    ... 
+0

En realidad estaba buscando cómo reemplazar el 'is' y operadores 'is not'. Como un 'query = tinydb.Query(). Field == value', para poder también escribir' Query(). Field no es None'. Pero parece que me queda '' __eq__' y '__ne__' por el momento, lo que lleva al campo' Query(). 'No piadoso! = None'. (sarc) –

Respuesta

134

una respuesta más completa es:

class MyClass(object): 

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

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

Aquí se podrían obtener True cuando preguntando si era 54 en m:

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

Ver documentation on overloading __contains__.

+0

@pthulin, el suyo puede ser "más completo" en términos de código, pero los enlaces de Ignacio a la documentación, que siempre es una gran ventaja para algunos. –

+12

@PEter. Sí, pero algunos de nosotros preferimos una buena representación visual de la respuesta. Ignacio hizo poco para beneficiar la pregunta, aparte de dirigirnos aquí primero en lugar de google, no gracias. –

+0

Zoran, estoy de acuerdo, e incluso he votado a favor esta respuesta y no la otra. Solo estoy señalando que una verdadera buena respuesta siempre debe vincular a documentos, si está disponible. –

6

También puede ser que desee echar un vistazo a un marco de anulación operador infijo yo era capaz de utilizar para crear un lenguaje específico de dominio:

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

+0

Buen truco. No puedo pensar en un caso de uso para eso, pero muy limpio. –

Cuestiones relacionadas