Booléen

Un booléen est un type natif de Python qui n'a que deux valeurs possibles : True ou False.

Les booléens sont un sous-type du type natif des nombres entiers :

#norun
issubclass(bool, int)  # True

Le booléen True est donc similaire au nombre 1 et le booléen False au nombre 0.

Il est ainsi possible de réaliser des opérations mathématiques entre un booléen et un entier :

print(True + 1)
print(True - 1)
print(False + 1)
print(False - 1)
print(True * 5)
print(False * 5)
print(True ** 4)

Cela peut sembler inutile, mais c'est très pratique si vous devez par exemple établir un compteur qui se base sur le résultat d'une expression qui résulte sur un booléen.

Par exemple, le code suivant :

utilisateur_inscrit = True
nombre_utilisateurs = 0
if utilisateur_inscrit:
    nombre_utilisateurs += 1

print(nombre_utilisateurs)

Peut être simplifié de la sorte, sans la structure conditionnelle :

utilisateur_inscrit = True
nombre_utilisateurs = 0

nombre_utilisateurs += utilisateur_inscrit
print(nombre_utilisateurs)

Tous les objets de Python peuvent être évalués comme des booléens.

Pour évaluer (ou convertir) un objet en tant que booléen, on utilise la classe bool :

print(bool("Bonjour"))
print(bool(1))
print(bool([]))
print(bool((1, 2, 3)))
print(bool({1: "un", 2: "deux"}))

Tous les types natifs possèdent par défaut une valeur qui est évaluée comme False, toutes les autres étant évaluées comme True.

Par exemple, tous les types natifs « vides » seront évalués comme False :

print(bool(""))
print(bool([]))
print(bool(()))
print(bool({}))

Pour d'autres objets, ce seront des valeurs spécifiques, comme le 0 pour les nombres entiers, 0.0 pour les nombres décimaux ou encore le mot clé None :

print(bool(0))
print(bool(0.0))
print(bool(None))

Toutes les autres valeurs de ces types retourneront True quand vous les passez à la classe bool.

Il est possible d'implémenter la méthode spéciale __bool__ pour définir le comportement d'un objet avec la classe bool :

#norun
class Person:
    def __init__(self, prenom, nom, age):
        self.prenom = prenom
        self.nom = nom
        self.age = age

    def __bool__(self):
        return self.age >= 18

patrick = Person(prenom="Patrick", nom="Michaud", age=14)
john = Person(prenom="John", nom="Tremblay", age=20)

print(bool(patrick))  # False car Patrick a moins de 18 ans
print(bool(john))     # True car Patrick a plus de 18 ans