valores operadores operaciones logicas exclusivo declarar booleanos booleano booleanas binarios binarias python boolean

operadores - Valor booleano de objetos en Python



valores booleanos y operaciones logicas (2)

Consulte los documentos de Python para __nonzero__ .

class foo(object): def __nonzero__( self) : return self.bar % 2 == 0 def a(foo): if foo: print "spam" else: print "eggs" def main(): myfoo = foo() myfoo.bar = 3 a(myfoo) if __name__ == "__main__": main()

Como sabemos, Python tiene valores booleanos para los objetos: si una clase tiene un método __len__ , cada instancia para la cual __len__() devuelve 0 se evaluará como un False booleano (por ejemplo, la lista vacía).

De hecho, cada objeto personalizado, vacío e iterable, se evalúa como False si aparece en una expresión booleana.

Ahora supongamos que tengo una clase foo con la bar atributos. ¿Cómo puedo definir su valor de verdad, de modo que, digamos, se evaluará como True if bar % 2 == 0 y False caso contrario?

Por ejemplo:

myfoo = foo() myfoo.bar = 3 def a(myfoo): if foo: print "spam" else: print "eggs"

entonces, a(myfoo) debería imprimir "eggs" .


En Python <3.0:

Tienes que usar __nonzero__ para lograr lo que quieres. Es un método que Python invoca automáticamente al evaluar un objeto en un contexto booleano. Debe devolver un valor booleano que se utilizará como valor para evaluar.

P.EJ :

class Foo(object): def __init__(self, bar) : self.bar = bar def __nonzero__(self) : return self.bar % 2 == 0 if __name__ == "__main__": if (Foo(2)) : print "yess !"

En Python => 3.0:

Lo mismo, excepto que el método ha sido renombrado a __bool__ mucho más obvio.