oujood.com

La Programmation orientée objet en Python

Dans ce tutoriel, vous apprendrez la programmation orientée objet en Python, notamment les concepts essentiels tels que les objets, les classes, les attributs, les méthodes, les héritages, les méthodes de remplacement, etc.
Tout en Python est un objet. Un objet a un état et des comportements. Pour créer un objet, vous définissez d'abord une classe. Puis, à partir de cette classe, vous pouvez créer un ou plusieurs objets. Les objets sont des instances d'une classe.

chercher |

Définir une classe

Pour définir une classe, vous utilisez le mot-clé class suivi du nom de la classe.
Exemple : l'exemple suivant définit une classe Personne :

  Copier le code

class Personne :
    pass
Comme vous le costatez, nous avons définit la classe de la même maniére qu'une fonction.
Pour créer un objet à partir de la classe Personne, vous utilisez le nom de la classe suivi de parenthèses (), comme pour appeler une fonction :

Voir plus sur les fonctions dans notre tutoriel

person = Personne()

Dans cet exemple, la person est une instance de la classe Personne.
Les classes sont appelables (c'est-à-dire qu'on les appale lorsque l'on a besoin).

Définir des attributs d'instance

Python est dynamique. Cela signifie que vous pouvez ajouter un attribut à l'instance d'une classe de manière dynamique au moment de l'exécution.
Exemple : l'exemple suivant ajoute l'attribut name à l'objet person :

person.name = 'Anne'

Toutefois, si vous créez un autre objet Personne, le nouvel objet n'aura pas l'attribut name.
Pour définir et initialiser un attribut pour toutes les instances d'une classe, vous utilisez la méthode __init__ lors de la définition de la classe.
L'exemple suivant définit la classe Personne avec deux attributs d'instance : name et age :

  Copier le code

class Personne :
    def __init__(self, name, age) :
        self.name = nom
        self.age = age
Lorsque vous créez un objet Personne, Python appelle automatiquement la méthode __init__ pour initialiser les attributs de l'instance. Dans la méthode __init__, le mot-clé self est l'instance de la classe Personne.
L'exemple suivant crée un objet Personne nommé person :

person = Personne('Anne', 25)

L'objet person possède maintenant les attributs name et age. Pour accéder à un attribut d'instance, vous utilisez la notation point.
Exemple, dans le code suivant on utilise les valeur de les attributs name et age de l'objet person :

  Copier le code

class Personne :
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age

person = Personne('Anne', 25)
print(f"Salut, {person.name} tu a {person.age} ans.")

Définir des méthodes d'instance

L'exemple suivant ajoute une méthode d'instance appelée saluer() à la classe Personne :

  Copier le code

classe Personne :
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age

    def saluer(self) :
        return f"Salut {self.name} vous avez {self.age} ans. "
Pour appeler une méthode d'instance, vous utilisez également la notation par points.
Exemple

  Copier le code

class Personne :
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age

    def saluer(self) :
        return f"Salut {self.name} vous avez {self.age} ans."

person = Personne('Anne', 25)
print(person.saluer())
Sortie :
Salut Anne vous avez 25 ans.

Définir les attributs de classe

Contrairement aux attributs d'instance, les attributs de classe sont partagés par toutes les instances de la classe. Ils sont utiles si vous voulez définir des constantes de classe ou des variables qui gardent la trace du nombre d'instances d'une classe.
Exemple, l'exemple suivant définit l'attribut de classe compteur dans la classe Personne :

  Copier le code

classe Personne :
    compteur = 0

    def __init__(self, nom, age) :
        self.name = nom
        self.age = age

    def saluer(self) :
        return f"Salut {self.name} vous avez {self.age} ans."
Vous pouvez accéder à l'attribut compteur de la classe Personne :

Personne.compteur

Ou à partir de n'importe quelle instance de la classe Personne :

  Copier le code

person = Personne('Anne',25)
person.compteur
Pour rendre la variable compteur plus utile, vous pouvez augmenter sa valeur de un une fois qu'un objet est créé. Pour ce faire, vous augmentez l'attribut de classe compteur dans la méthode __init__ :

  Copier le code

class Personne :
    compteur = 0
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age
        Personne.compteur += 1

    def saluer(self) :
        return f"Salut, {self.name} vous avez {self.age} ans."
L'exemple suivant crée deux instances de la classe Personne et affiche la valeur du compteur :

  Copier le code

class Personne :
    compteur = 0
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age
        Personne.compteur += 1

    def saluer(self) :
        return f"Salut, {self.name} vous avez {self.age} ans."

p1 = Personne('Anne', 25)
p2 = Personne('Jane', 22)
print(f"{Personne.compteur} instences ont été crées")
Résultat :
2 instences ont été crées

Définir une méthode de classe

Comme un attribut de classe, une méthode de classe est partagée par toutes les instances de la classe. Le premier argument d'une méthode de classe est la classe elle-même. Par convention, son nom est cls. Python passe automatiquement cet argument à la méthode de classe. Vous pouvez également utiliser le décorateur @classmethod pour décorer une méthode de classe.
L'exemple suivant définit une méthode de classe qui renvoie un objet anonyme de type Personne :

  Copier le code

classe Personne :
    compteur = 0

    def __init__(self, name, age) :
        self.name = nom
        self.age = age
        Person.compteur += 1

    def saluer(self) :
        return f"Salut, {self.name} vous avez {self.age} ans."

    @classmethod
    def create_anonymous(cls) :
        return Personne('Anonyme', 22)
L'exemple suivant montre comment appeler la méthode de classe create_anonymous() :

  Copier le code

class Personne :
    compteur = 0
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age
        Personne.compteur += 1

    def saluer(self) :
        return f"Salut, {self.name} vous avez {self.age} ans."
    @classmethod
    def create_anonymous(cls) :
        return Personne('Anonyme', 22)

anonymous = Personne.create_anonymous()
print(anonymous.name)
print(anonymous.age)

Définir une méthode statique

Une méthode statique n'est pas liée à une classe ou à des instances de cette classe. En Python, vous utilisez les méthodes statiques pour regrouper des fonctions logiquement liées dans une classe. Pour définir une méthode statique, vous utilisez le sélecteur @staticmethod.
Exemple : l'exemple suivant définit une classe Temperature_convertisseur qui possède deux méthodes statiques permettant de convertir les valeurs Celsius en Fahrenheit et vice versa :

  Copier le code

class Temperature_convertisseur:
    @staticmethod
    def celsius_en_fahrenheit(c):
        return 9 * c / 5 + 32

    @staticmethod
    def fahrenheit_en_celsius(f):
        return 5 * (f - 32) / 9
Pour appeler une méthode statique, vous utilisez la syntaxe :
ClassName.static_method_name() .
Exemple :

  Copier le code

f = Temperature_convertisseur.celsius_en_fahrenheit(30)
print(f) 

Remarquez que Python ne passe pas implicitement une instance (self) ainsi qu'une classe (cls) comme premier argument d'une méthode statique.

Héritage simple

Une classe peut réutiliser une autre classe en héritant de ses attributs et méthodes. Lorsqu'une classe enfant hérite d'une classe parent, la classe enfant peut accéder aux attributs et aux méthodes de la classe parent.
Exemple, vous pouvez définir une classe Employé qui hérite de la classe Personne :

  Copier le code

class Personne :
    def __init__(self, nom, age) :
        self.name = nom
        self.age = age

    def saluer(self) :
        return f"Salut, {self.name} vous avez {self.age} ans."
    
class Employe(Personne):
    def __init__(self, nom, age, job_title) :
        super().__init__(nom, age)
        self.job_title = job_title

person = Personne('Anne', 25)
print(person.saluer())

employe=Employe('Anne', 25, 'développeur python')
print(employe.saluer())
A l'intérieur de la classe Employe, la méthode __init__ appelle la méthode __init__method de la classe Personne pour initialiser les attributs nom et age. La méthode super() permet à une classe enfant d'accéder à une méthode de la classe parent.
La classe Employe élargit la classe Personne en ajoutant un attribut supplémentaire appelé job_title.
Nous n'avons pas définit les attributs nom et age car la classe Employe les a hérité de la classe parent Perssone.
La classe Personne est la classe parent tandis que la classe Employe est une classe enfant.
Pour remplacer la méthode saluer() de la classe Person, vous pouvez définir la méthode saluer() de la classe Employe comme suit :

  Copier le code

classe Employe( Personne) :
    def __init__(self, name, age, job_title) :
        super().__init__(nom, âge)
        self.job_title = job_title

    def saluer(self) :
        return super().saluer() + f" Je suis un {self.job_title}."
La méthode saluer() de l'employé est également appelée la méthode saluer() de la classe Personne.
L'exemple suivant crée une nouvelle instance de la classe Employe et appelle la méthode saluer() :

  Copier le code

employee = Employee('John', 25, 'développeur Python')
print(employe.saluer())
Dans ce tutoriel, vous avez appris un bref aperçu de la programmation orientée objet en Python.

  Copier le code






Voir aussi nos tutoriel :

Balise bouton

Définit un bouton cliquable

fonction strcmp

Comparaison binaire de chaînes

fonction chop, chop

Alias de rtrim