La programmation orientée objet (POO) avec le langage Python
1. Classes et attributs :
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.
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)
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()