La programmation orientée objet (POO) est un paradigme central en Python. Elle permet de structurer le code en regroupant des données et des comportements au sein d'entités logiques nommées classes.
Concepts fondamentaux
- Classe : Un modèle ou un plan de conception qui définit les caractéristiques (attriubts) et les comportements (méthodes) communs à un groupe d'objets.
- Objet : Une instance concrète d'une classe. Si "Voiture" est une classe, une Tesla spécifique garée dans votre garage est un objet.
- Instanciation : Le processus de création d'un objet à partir d'une classe.
- Méthode : Une fonction définie à l'intérieur d'une classe qui manipule les données de l'objet.
- Attribut de classe : Une variable partagée par toutes les instances d'une classe. Elle est définie directement dans le corps de la classe, hors de toute méthode.
- Attribut d'instance : Une variable spécifique à chaque objet, préfixée par
self, généralement définie dans le constructeur. - Héritage : Mécanisme permettent à une classe (enfant) de récupérer les propriétés d'une autre classe (parent).
- Surcharge (Override) : Redéfinition d'une méthode héritée pour adapter son comportement dans la classe enfant.
Définition d'une classe
En Python, la création d'une classe suit une syntaxe simple. Voici les différentes manières de déclarer une structure de classe :
# Syntaxe moderne (hérite implicitement d'object)
class Vehicule:
pass
# Syntaxe explicite
class Avion(object):
pass
Structure et implémentation pratique
Le composant le plus important d'une classe est la méthode __init__. Il s'agit du constructeur, appelé automatiquement lors de la création d'un nouvel objet pour initialiser ses attributs.
class Entreprise:
# Attribut de classe (commun à toutes les instances)
secteur = "Technologie"
def __init__(self, nom, effectif):
"""Constructeur pour initialiser les attributs d'instance"""
self.nom_societe = nom # Attribut d'instance
self.nombre_employes = effectif # Attribut d'instance
def afficher_infos(self):
"""Méthode d'instance pour afficher les détails"""
print(f"Société : {self.nom_societe}")
print(f"Employés : {self.nombre_employes}")
def modifier_effectif(self, nouveau_nombre):
self.nombre_employes = nouveau_nombre
if __name__ == "__main__":
# Instanciation de l'objet
ma_boite = Entreprise("OpenData", 50)
# Accès aux attributs d'instance
print(ma_boite.nom_societe) # Sortie : OpenData
print(ma_boite.nombre_employes) # Sortie : 50
# Accès à l'attribut de classe
print(ma_boite.secteur) # Sortie : Technologie
# Appel d'une méthode
ma_boite.afficher_infos()
Le rôle du paramètre self
Dans chaque méthode d'instance, le premier paramètre est obligatoirement self. Il représente l'instance actuelle de l'objet sur laquelle la méthode est appelée.
- Il permet d'accéder aux variables et autres méthodes de la même classe.
- Lors de l'appel d'une méthode (ex:
objet.methode()), Python transmet automatiquement l'objet àself, il ne faut donc pas passer cet argument manuellement.