La programmation orientée objet (POO) avec le langage Python
1. Programmation orientée objet avec Python. :
La programmation orientée objet (POO) en Python est un paradigme essentiel pour structurer votre code de manière organisée et modulable.
Classe : par exemple "Personne".
Objet : Instance de classe (ex : Moi).
Attribut : Variable de classe (ex : nom, prénom, âge, lieu_résidence,...).
Propriété : Manière de manipuler les attributs (lecture seule, accès non autorisé en dehors de la classe, etc.).
Méthode : Fonction d'une classe (ex : parler).
Méthode de classe : Fonction d'une classe...
Méthode statique : Fonction d'une classe, mais indépendante de celle-ci.
Héritage : Classe Fille qui hérite d'une classe Mère (Fille est une sorte de Mère). Classe Chat qui hérite de la classe Animal.
2. Classes et attributs. :
Premier exemple de création d’un objet avec les attributs par défaut en « dur », j’ai ajouté la création d’une propriété en lecture seule « nom_complet » ce qui est facultatif.
#!/usr/bin/env python3.10 #-*- coding: utf-8 -*- class Personne: # Définition de notre classe Personne def __init__(self): # Notre méthode construteur self.nom = "Renaudeau" # Définition des attributs self.prénom = "Dominique" self.âge = 59 self.lieu_résidence = 'Gascougnolles' @property # Création d'une propriété en lecture seule def nom_complet(self): return f"{self.prénom} {self.nom}" # ******************************************************* Moi = Personne() # Moi est un objet de classe Personne # Affichage des valeurs des attributs print("Mon nom : ",Moi.nom) print("Mon prénom : ",Moi.prénom) print("Mon age : ",Moi.âge,"ans") print("Mon lieu de résidence : ",Moi.lieu_résidence) # Modification de l'attribut prénom Moi.prénom = 'Alexandre' print("Mon prénom après changement : ",Moi.prénom) print("Moi : ",type(Moi)) # Afficher la classe de l'objet Moi print("Affichage du nom complet avec la propriété : ",Moi.nom_complet)
Deuxième exemple de création d’un objet avec les attributs que l'on peut saisir, la propriété « nom_complet » peut maintenant être modifiée avec mise à jour du prénom et du nom.
#!/usr/bin/env python3.10 #-*- coding: utf-8 -*- class Personne: # Définition de notre classe Personne def __init__(self, nom, prénom): # Notre méthode construteur self.nom = nom # Définition des attributs self.prénom = prénom @property # Création d'une propriété en lecture seule def nom_complet(self): return f"{self.prénom} {self.nom}" @nom_complet.setter # Possibilité de changer la valeur de la propriété def nom_complet(self, nouveau_nom): prénom, nom = nouveau_nom.split(" ") # On coupe le nouveau nom à l'espace self.prénom = prénom # Mise à jour des attributs prénom et nom self.nom = nom # *************************************************************************** Moi = Personne("Renaudeau","Dominique") # Moi est un objet de classe Personne # Affichage des valeurs des attributs print("Mon nom : ",Moi.nom) print("Mon prénom : ",Moi.prénom) print("Affichage du nom complet avec la propriété : ",Moi.nom_complet) # On modifie le nom_complet en séparant prénom et nom par un espace Moi.nom_complet = "Alexandre Dumas" print("Mon nom : ",Moi.nom) print("Mon prénom : ",Moi.prénom) print("Affichage du nom complet avec la propriété : ",Moi.nom_complet)
3. Méthodes standard, de classe et statique. :
#!/usr/bin/env python3.10 #-*- coding: utf-8 -*- class Personne: # Définition de notre classe Personne lieu_habitation = "Vouillé" def __init__(self, nom, prénom): # Notre méthode construteur self.nom = nom # Définition des attributs self.prénom = prénom # Méthode standard "d'instance self" : fonction sur une instance (objet) def parler(self, message): print("{} {} a dit : {}".format(self.prénom, self.nom, message)) # cls : Méthode de classe def changer_ville(cls, nouvelle_ville): Personne.lieu_habitation = nouvelle_ville changer_ville = classmethod(changer_ville) # Méthode statique : fonction indépendante mais lié à une classe def definition(): print("Tests des méthodes") definition = staticmethod(definition) # *************************************************************************** Moi = Personne("Renaudeau","Dominique") # Moi est un objet de classe Personne Moi.parler("Bonjour !") print("Lieu d'habitation : ",Moi.lieu_habitation) Moi.changer_ville("Niort") print("Nouveau lieu d'habitation : ",Moi.lieu_habitation) Personne.definition()