La programmation orientée objet (POO) avec le langage Python

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche

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()