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"
.
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()
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__
.