Définir des Classes et des Objets en Python

PythonBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez les concepts fondamentaux de la Programmation Orientée Objet (POO) en Python. Nous explorerons comment définir des classes, qui servent de modèles (blueprints) pour créer des objets, et comprendrons la relation entre les classes et les objets.

Vous acquerrez une expérience pratique en créant et en utilisant des instances de vos classes définies. Le laboratoire vous guidera à travers l'initialisation des objets avec la méthode __init__ pour définir leur état initial et la personnalisation de leur représentation textuelle à l'aide de la méthode __repr__ pour une meilleure débogage et lisibilité.

Ceci est un Guided Lab, qui fournit des instructions étape par étape pour vous aider à apprendre et à pratiquer. Suivez attentivement les instructions pour compléter chaque étape et acquérir une expérience pratique. Les données historiques montrent que c'est un laboratoire de niveau débutant avec un taux de réussite de 94%. Il a reçu un taux d'avis positifs de 100% de la part des apprenants.

Définir une Classe et Créer une Instance

Dans cette étape, vous apprendrez comment définir une classe de base et créer un objet, ou instance, à partir de celle-ci.

En Programmation Orientée Objet, une classe est un modèle (blueprint) pour la création d'objets. Elle définit un ensemble d'attributs (données) et de méthodes (fonctions) que les objets créés posséderont. Un objet est une instance d'une classe, une entité concrète construite à partir du modèle de la classe.

Commençons par créer une classe simple nommée Dog.

Tout d'abord, ouvrez le fichier dog.py depuis l'explorateur de fichiers situé sur le côté gauche du WebIDE. Ce fichier est actuellement vide.

Maintenant, ajoutez le code suivant dans dog.py pour définir la classe Dog, créer une instance et l'utiliser :

## Define a simple Dog class
class Dog:
    ## Class attribute
    species = "Canis familiaris"

    ## Method
    def bark(self):
        print("Woof!")

## Create an instance (object) of the Dog class
my_dog = Dog()

## Access the class attribute using the instance
print(f"The species is: {my_dog.species}")

## Call the instance's method
print("The dog says:")
my_dog.bark()

Décortiquons le code :

  • class Dog: : Cette ligne définit une nouvelle classe nommée Dog.
  • species = "Canis familiaris" : Ceci est un attribut de classe (class attribute). Sa valeur est partagée par toutes les instances de la classe Dog.
  • def bark(self): : Ceci définit une méthode (method), qui est une fonction à l'intérieur d'une classe. Le paramètre self est une référence à l'instance actuelle de la classe et est utilisé pour accéder aux variables qui appartiennent à la classe.
  • my_dog = Dog() : Cette ligne crée une nouvelle instance de la classe Dog et l'assigne à la variable my_dog.
  • my_dog.species : Nous accédons à l'attribut species de l'objet my_dog en utilisant la notation par point.
  • my_dog.bark() : Nous appelons la méthode bark sur l'objet my_dog. Python passe automatiquement l'objet my_dog comme argument self à la méthode.

Enregistrez le fichier. Pour exécuter votre script, ouvrez un terminal dans le WebIDE et exécutez la commande suivante :

python dog.py

Vous devriez voir la sortie suivante, confirmant que votre objet a été créé et que son attribut et sa méthode ont été accédés correctement.

The species is: Canis familiaris
The dog says:
Woof!

Initialiser les Objets avec la Méthode __init__

Alors que les attributs de classe sont partagés par toutes les instances, vous souhaitez souvent que chaque instance possède ses propres données uniques. La méthode __init__ est une méthode spéciale dans les classes Python qui agit comme un constructeur. Elle est automatiquement appelée lorsque vous créez une nouvelle instance, vous permettant d'initialiser ses attributs uniques.

Modifions la classe Dog pour donner à chaque chien un nom et une race uniques.

Ouvrez à nouveau le fichier dog.py et remplacez son contenu par le code suivant :

## Define a Dog class with an __init__ method
class Dog:
    ## Class attribute
    species = "Canis familiaris"

    ## The __init__ method (constructor)
    def __init__(self, name, breed):
        ## Instance attributes
        self.name = name
        self.breed = breed

    ## Method
    def bark(self):
        print("Woof!")

## Create instances with unique attributes
dog1 = Dog("Buddy", "Golden Retriever")
dog2 = Dog("Lucy", "Labrador")

## Access the instance attributes
print(f"{dog1.name} is a {dog1.breed}.")
print(f"{dog2.name} is a {dog2.breed}.")

## The class attribute is still shared
print(f"Both are of the species: {dog1.species}")

Voici ce qui a changé :

  • def __init__(self, name, breed): : Nous avons défini la méthode __init__. Elle prend self, name et breed comme arguments.
  • self.name = name et self.breed = breed : Ces lignes créent des attributs d'instance (instance attributes). Ils sont uniques à chaque objet Dog. Le mot-clé self attache ces attributs à l'instance spécifique en cours de création.
  • dog1 = Dog("Buddy", "Golden Retriever") : Lors de la création d'une instance, nous passons maintenant des arguments pour name et breed. Ceux-ci sont automatiquement transmis à la méthode __init__.

Enregistrez le fichier et exécutez-le depuis le terminal :

python dog.py

Le résultat montre que chaque objet chien possède son propre nom et sa propre race, tout en partageant l'attribut de classe species.

Buddy is a Golden Retriever.
Lucy is a Labrador.
Both are of the species: Canis familiaris

Personnaliser la Représentation des Objets avec __repr__

Lorsque vous essayez d'imprimer un objet directement, Python affiche une représentation par défaut qui inclut la classe de l'objet et son adresse mémoire, ce qui n'est pas très utile. Vous pouvez fournir une représentation sous forme de chaîne de caractères plus descriptive et conviviale pour le développeur en définissant la méthode spéciale __repr__.

Ajoutons une méthode __repr__ à notre classe Dog.

Ouvrez dog.py et remplacez son contenu par la version finale de notre code :

## Define a Dog class with __init__ and __repr__ methods
class Dog:
    ## Class attribute
    species = "Canis familiaris"

    ## The __init__ method (constructor)
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    ## The __repr__ method for a developer-friendly representation
    def __repr__(self):
        return f"Dog(name='{self.name}', breed='{self.breed}')"

    ## Method
    def bark(self):
        print("Woof!")

## Create an instance
my_dog = Dog("Buddy", "Golden Retriever")

## Print the object directly
print(my_dog)

L'ajout clé est :

  • def __repr__(self): : Ceci définit la méthode de représentation.
  • return f"Dog(name='{self.name}', breed='{self.breed}')" : Cette méthode doit retourner une chaîne de caractères (string). Une bonne pratique consiste à faire en sorte que cette chaîne ressemble à une expression Python valide qui pourrait être utilisée pour recréer l'objet avec le même état.

Enregistrez le fichier et exécutez le script une dernière fois :

python dog.py

Au lieu d'une adresse mémoire, la sortie est maintenant la chaîne de caractères claire et informative retournée par votre méthode __repr__. Ceci est extrêmement utile pour le débogage (debugging).

Dog(name='Buddy', breed='Golden Retriever')

Résumé

Dans ce laboratoire, vous avez appris les bases de la Programmation Orientée Objet (POO) en Python. Vous avez commencé par définir une classe simple et en créer une instance, apprenant à utiliser les attributs de classe et les méthodes. Vous avez ensuite amélioré votre classe en ajoutant la méthode __init__ pour initialiser chaque objet avec des attributs d'instance uniques. Enfin, vous avez personnalisé la représentation sous forme de chaîne de caractères de vos objets en implémentant la méthode __repr__, ce qui améliore grandement la clarté et la facilité de débogage de votre code. Ces concepts constituent la base pour construire des applications plus complexes et organisées en Python.