1Attributs privés et contrôles Moyen
- Créer une classe
Departementavec les attributs privésnometbudget. - Créer
get_nom()etget_budget(). - Créer
ajouter_budget(montant)etretirer_budget(montant). - Créer
afficher()qui affiche le nom et le budget.
class Departement:
def __init__(self, nom, budget):
self.__nom = nom
self.__budget = budget
# --- getters ---
def get_nom(self):
return self.__nom
def get_budget(self):
return self.__budget
# --- modifications contrôlées ---
def ajouter_budget(self, montant):
if montant > 0:
self.__budget += montant
else:
print("Le montant doit être positif.")
def retirer_budget(self, montant):
if montant <= 0:
print("Le montant doit être positif.")
elif montant > self.__budget:
print("Budget insuffisant.")
else:
self.__budget -= montant
def afficher(self):
print(f"Département : {self.__nom} | Budget : {self.__budget} €")d = Departement("Informatique", 50000)
d.afficher() # Département : Informatique | Budget : 50000 €
d.ajouter_budget(10000)
d.afficher() # Budget : 60000 €
d.retirer_budget(80000) # Budget insuffisant.
d.retirer_budget(-5) # Le montant doit être positif.
d.afficher() # Budget : 60000 € ← inchangéretirer_budgetC'est là que l'encapsulation prend son sens. Si budget était public, on
écrirait d.budget -= 80000 et le département se retrouverait avec un
budget négatif — un état absurde.
La méthode impose deux contrôles : montant positif, et budget suffisant. L'objet ne peut plus devenir incohérent, quoi que fasse le reste du programme.
__init__ ET partoutdef __init__(self, nom, budget):
self.__nom = nom # privé
def get_nom(self):
return self.nom # ✘ AttributeError : « nom » n'existe pasL'attribut s'appelle __nom, pas nom. Toute méthode de la
classe doit écrire self.__nom. C'est l'oubli le plus courant quand on
passe du public au privé.