Valeur booléenne des objets en Python

Comme nous le savons, Python a des valeurs booléennes pour les objets: si une classe a une méthode __len__, chaque instance pour laquelle {[2] } retourne 0 sera évaluée comme une méthode booléenne False (par exemple, la liste vide).

En fait, chaque objet personnalisé itérable et vide est évalué comme False s'il apparaît dans l'expression booléenne.

Maintenant, supposons que j'ai une classe foo avec l'attribut bar. Comment puis-je définir sa valeur de vérité, de sorte que, disons, il sera évalué à True if bar % 2 == 0 et False sinon?

Par exemple:

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

Donc, a(myfoo) devrait imprimer "eggs".

28
demandé sur Alois Mahdal 2009-07-06 17:59:55

2 réponses

Reportez-vous aux documents Python pour __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()
35
répondu sunqiang 2016-05-31 12:19:20

En Python

, Vous devez utiliser __nonzero__ pour atteindre ce que vous voulez. C'est une méthode qui est appelée automatiquement par Python lors de l'évaluation d'un objet dans un contexte booléen. Il doit renvoyer un booléen qui sera utilisé comme valeur à évaluer.

Par Exemple:

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 :

Même chose, sauf que la méthode a été renommée en beaucoup plus évidente __bool__.

40
répondu e-satis 2016-05-22 15:25:41