La programmation orientée objet (POO) est un paradigme de programmation qui utilise des objets et des classes. Ce paradigme est très utile pour organiser le code, le rendre plus modulaire, réutilisable et maintenable. Voici une introduction complète aux classes et objets en Python.
1. Définition des Classes
Une classe est un plan (ou modèle) pour créer des objets. Elle définit un ensemble d’attributs et de méthodes qui caractérisent les objets créés à partir de cette classe.
Syntaxe de base d’une classe
class MaClasse:
pass
Ici, MaClasse
est une classe vide définie avec le mot-clé class
.
2. Le constructeur __init__
Le constructeur __init__
est une méthode spéciale appelée lors de la création d’une nouvelle instance de la classe.
La programmation orientée objet (POO) est un paradigme de programmation qui utilise des objets et des classes. Ce paradigme est très utile pour organiser le code, le rendre plus modulaire, réutilisable et maintenable. Voici une introduction complète aux classes et objets en Python.
class Personne:
def __init__(self, nom, age):
self.nom = nom
self.age = age
3. Création d’une Instance
Une instance est un objet créé à partir d’une classe.
personne1 = Personne("Alice", 30)
4. Attributs d’Instance
Les attributs d’instance sont des variables qui appartiennent à chaque instance d’une classe.
print(personne1.nom) # Alice
print(personne1.age) # 30
5. Méthodes d’Instance
Les méthodes d’instance sont des fonctions définies à l’intérieur d’une classe et qui opèrent sur les instances de cette classe.
class Personne:
def __init__(self, nom, age):
self.nom = nom
self.age = age
def se_presenter(self):
print(f"Je m'appelle {self.nom} et j'ai {self.age} ans.")
personne1 = Personne("Alice", 30)
personne1.se_presenter() # Je m'appelle Alice et j'ai 30 ans.
6. Attributs et Méthodes de Classe
Les attributs et méthodes de classe sont partagés entre toutes les instances d’une classe.
class Personne:
population = 0 # Attribut de classe
def __init__(self, nom, age):
self.nom = nom
self.age = age
Personne.population += 1 # Incrémentation à chaque nouvelle instance
@classmethod
def afficher_population(cls):
print(f"Population totale : {cls.population}")
personne1 = Personne("Alice", 30)
personne2 = Personne("Bob", 25)
Personne.afficher_population() # Population totale : 2
7. Héritage
L’héritage permet de créer une nouvelle classe à partir d’une classe existante. La nouvelle classe hérite des attributs et méthodes de la classe parente.
class Etudiant(Personne):
def __init__(self, nom, age, etudes):
super().__init__(nom, age)
self.etudes = etudes
def se_presenter(self):
super().se_presenter()
print(f"Je suis étudiant en {self.etudes}.")
etudiant1 = Etudiant("Charlie", 22, "informatique")
etudiant1.se_presenter()
# Je m'appelle Charlie et j'ai 22 ans.
# Je suis étudiant en informatique.
8. Polymorphisme
Le polymorphisme permet d’utiliser une méthode de la même manière pour différentes classes.
class Animal:
def faire_du_bruit(self):
pass
class Chien(Animal):
def faire_du_bruit(self):
print("Wouf!")
class Chat(Animal):
def faire_du_bruit(self):
print("Miaou!")
def faire_faire_du_bruit(animal):
animal.faire_du_bruit()
chien = Chien()
chat = Chat()
faire_faire_du_bruit(chien) # Wouf!
faire_faire_du_bruit(chat) # Miaou!
9. Encapsulation
L’encapsulation restreint l’accès direct à certains attributs et méthodes d’un objet. En Python, on utilise des conventions pour indiquer qu’un attribut ou une méthode est privé(e).
class Banque:
def __init__(self, solde):
self.__solde = solde # Attribut privé
def deposer(self, montant):
self.__solde += montant
def retirer(self, montant):
if montant <= self.__solde:
self.__solde -= montant
else:
print("Fonds insuffisants")
def afficher_solde(self):
print(f"Solde: {self.__solde}")
compte = Banque(1000)
compte.deposer(500)
compte.retirer(200)
compte.afficher_solde() # Solde: 1300
10. Méthodes Magiques
Les méthodes magiques (ou dunder methods) sont des méthodes spéciales en Python, précédées et suivies de deux underscores (__
). Elles permettent de définir le comportement de certaines opérations pour les instances de classe.
Exemple de méthode __str__
class Personne:
def __init__(self, nom, age):
self.nom = nom
self.age = age
def __str__(self):
return f"{self.nom}, {self.age} ans"
personne1 = Personne("Alice", 30)
print(personne1) # Alice, 30 ans
11. Propriétés
Les propriétés permettent de contrôler l’accès aux attributs d’instance.
class Personne:
def __init__(self, nom, age):
self._nom = nom
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, valeur):
if valeur < 0:
raise ValueError("L'âge ne peut pas être négatif")
self._age = valeur
personne1 = Personne("Alice", 30)
print(personne1.age) # 30
personne1.age = 35
print(personne1.age) # 35
Conclusion
Les classes et les objets sont des concepts fondamentaux de la programmation orientée objet. En utilisant des classes, des objets, de l’héritage, du polymorphisme, de l’encapsulation et d’autres concepts, vous pouvez écrire du code plus modulaire, réutilisable et maintenable. Cette introduction couvre les bases, mais il existe de nombreux aspects avancés et subtilités à explorer pour maîtriser pleinement la programmation orientée objet en Python.