Blog Alphorm Logo de blog informatique spécialisé en technologie et solutions IT
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Définir des Classes en Python
Agrandisseur de policeAa
Blog AlphormBlog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Search
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Suivez-nous
© Alphorm 2024 - Tous droits réservés
Développement

Définir des Classes en Python

L'Équipe Alphorm Par L'Équipe Alphorm 18 janvier 2025
Partager
26e lecture en min
Partager
Cet article fait partie du guide Tuto Python Gratuit : Apprenez les Bases et Réalisez des Projets Pratiques, partie 14 sur 23.

De nombreux développeurs peinent à définir et utiliser correctement les classes et leurs attributs en programmation orientée objet (POO), entraînant une structuration inefficace du code.

Sans une compréhension claire des concepts de classes et méthodes spéciales, le code devient difficile à maintenir, à déboguer et à faire évoluer, causant une perte de temps et de ressources.

Cet article vous offre un guide pratique pour maîtriser les classes, les attributs et les méthodes spéciales, optimisant ainsi la qualité et l’efficacité de votre code.

Table de matière
Définir une classe et ses attributs en PythonInstancier une classe en PythonLes méthodes spéciales en PythonConclusion

Définir une classe et ses attributs en Python

Définir une classe en Python

Commençons par apprendre à définir une classe et ses attributs en programmation orientée objet (POO). Une classe peut être comparée à un modèle qui nous permet de créer des objets, tout comme un moule à gâteau permet de créer des gâteaux.

Pour déclarer une classe, on utilise le mot-clé class suivi du nom de notre classe et de deux points, comme illustré dans l’exemple suivant :

Définition d'une classe en Python avec attributs et méthodes illustrés

Ici, nous avons créé une classe vide, donc nous devons nécessairement écrire le mot-clé pass pour indiquer qu’il n’y a pas encore de contenu.

Si nous écrivons print(Voiture) après avoir créé un objet Voiture, l’objet de cette classe sera affiché comme il est montré dans l’exemple suivant.

Création d'une instance de classe en Python avec attributs et méthodes.

Définir les attributs d'une classe en Python

Après avoir créé notre classe Voiture, nous allons maintenant définir les attributs de cette classe, qui sont simplement des variables propres à la classe. Par exemple, nous pouvons définir les attributs marque ,modele , nbre_roue et couleur, comme il est montré dans l’exemple suivant :

				
					class Voiture:
    marque = "Toyota"
    modele = "Corolla"
    nbre_roues = 4
    couleur = "rouge"
				
			

Pour afficher la valeur des attributs de notre classe, nous devons utiliser la syntaxe suivante :

				
					print(Voiture.marque)
print(Voiture.modele)
print(Voiture.nbre_roues)
print(Voiture.couleur)
				
			

Et voici le résultat afficher par l’exemple précèdent :

				
					Toyota
Corolla
4
rouge
				
			

Instancier une classe en Python

Créer une instance d'une classe en Python

Après avoir appris comment accéder aux attributs d’une classe, nous allons maintenant voir comment instancier une classe. De la même manière qu’un moule permet de créer plusieurs gâteaux, une classe peut générer plusieurs objets. Pour instancier un nouvel objet, vous suivez les étapes suivantes :

				
					class Voiture:
    marque = "Honda"
    modele = "Civic"
    annee = 2018
				
			

Dans cet exemple, la classe `Voiture` contient trois attributs : marque, modele, et annee, qui sont définis directement au niveau de la classe.Pour accéder à ces attributs, vous pouvez instancier un objet de la classe Voiture comme il est montrer dans l’exemple suivant :

				
					class Voiture:
    marque = "Honda"
    modele = "Civic"
    annee = 2018
ma_voiture = Voiture()
print(ma_voiture.marque)  # Affiche: Honda
print(ma_voiture.modele)  # Affiche: Civic
print(ma_voiture.annee)   # Affiche: 2018
				
			

Vous pouvez également accéder aux attributs directement depuis la classe sans créer d’objet :

				
					print(Voiture.marque)  # Affiche: Honda
print(Voiture.modele)  # Affiche: Civic
print(Voiture.annee)   # Affiche: 2018
				
			

Pour mieux comprendre la différence entre une classe et ses objets, voici un schéma qui illustre la classe « Voiture » ainsi que les objets « Objet 1 », « Objet 2 », « Objet 3 », et « Objet 4 ».

illustration d'une classe Voiture en Python avec attributs et méthodes en programmation

Utiliser les méthodes d'instance en Python

Après avoir vu comment instancier une classe et accéder à ses attributs, passons maintenant à la définition et l’utilisation des méthodes d’instance. Les méthodes d’instance sont le type de méthode le plus couramment utilisé lorsqu’on travaille avec des objets en Python. Elles permettent de manipuler les données propres à chaque instance d’une classe et sont essentielles pour la plupart des opérations orientées objet.

Nous allons commencer par créer une méthode appelée rouler pour la classe Voiture. Il est important de noter que le paramètre self doit être passé en premier dans notre méthode. Ce paramètre fait référence à l’instance actuelle de la classe. Si self n’est pas inclus, une erreur sera levée.Voici le code de notre classe :

				
					class Voiture:
    def __init__(self, marque, modele):
        self.marque = marque
        self.modele = modele
        self.kilometrage = 0
    def rouler(self, distance):
        """Cette méthode permet de faire rouler la voiture d'une certaine distance."""
        self.kilometrage += distance
        print(f"La {self.marque} {self.modele} a roulé {distance} km. Kilométrage total : {self.kilometrage} km.")
# Instanciation d'un objet de la classe Voiture
ma_voiture = Voiture("Toyota", "Corolla")
# Utilisation de la méthode d'instance rouler
ma_voiture.rouler(150)
				
			

Formation Python : Programmation Orientée Objet

Développez des applications robustes avec la POO en Python !

Découvrir cette formation
image de formation informatique sur les compétences IT et technologies modernes

Comprendre le mot-clé self en Python

Le mot-clé `self` est un élément fondamental en Python lorsqu’on travaille avec des classes et des objets. Il est utilisé pour faire référence à l’instance actuelle de la classe, c’est-à-dire à l’objet lui-même. Lorsqu’une méthode d’instance est définie dans une classe, `self` est toujours le premier paramètre de la méthode. Grâce à `self`, on peut accéder aux attributs et autres méthodes de l’objet à partir de cette méthode. En d’autres termes, `self` permet à une méthode de manipuler les données spécifiques à l’objet sur lequel elle a été appelée.

				
					class Voiture:
    marque = "Toyota"
    modele = "Corolla"
    annee = 2020
   
    def rouler(self):
        print(f"La {self.marque} {self.modele} de {self.annee} est en train de rouler.")
ma_voiture = Voiture()
ma_voiture.rouler()
				
			

Dans ce code, nous définissons une classe Voiture avec trois attributs de classe : marque, modele, et annee, qui sont définis avec des valeurs par défaut. Ces attributs sont partagés par toutes les instances de la classe. La classe inclut également une méthode d’instance appelée rouler. La méthode rouler utilise le mot-clé self pour accéder aux attributs de l’instance courante et affiche un message indiquant que la voiture est en train de rouler. Ensuite, nous créons une instance de la classe Voiture nommée ma_voiture. Enfin, nous appelons la méthode rouler sur cette instance, ce qui affiche un message avec les valeurs des attributs marque, modele, et annee de l’objet ma_voiture, comme il est montré dans la figure suivante :

Schéma illustrant la différence entre méthode et classe en Python

Les méthodes spéciales en Python

Qu'est-ce qu'une méthode spéciale en Python ?

Les méthodes spéciales en Python, également connues sous le nom de méthodes magiques, permettent de personnaliser le comportement des objets lors de certaines opérations intégrées.

Méthodes magiques Python illustrées, exemples de code et résultats.

Les méthodes spéciales, aussi appelées méthodes magiques ou dunder methods, sont des méthodes intégrées dans les classes Python qui commencent et se terminent par deux underscores (__). Elles permettent de personnaliser le comportement des objets pour certaines opérations intégrées.

Ainsi Voici un tableau qui récapitule quelque méthode les plus fréquemment utilisée en python :

les méthodes
Description
code
__init__
Constructeur de la classe ; initialise l’objet
def __init__(self, nom): self.nom = nom
__str__
Représentation sous forme de chaîne (utilisé par print)
def __str__(self): return self.nom
__repr__
Représentation détaillée de l’objet pour le débogage
def __repr__(self): return f’Person({self.nom})’
__len__
Retourne la longueur ou le nombre d’éléments
def __len__(self): return len(self.items)
__getitem__
Accès aux éléments par index ou clé
def __getitem__(self, index): return self.items[index]
__eq__
Comparaison d’égalité (==)
def __eq__(self, other): return self.nom == other.nom
__call__
Permet de rendre l’objet callable comme une fonction
def __call__(self, x): return self.value * x

Méthode spéciale __str__ en Python

Par exemple, dans la classe Voiture, si nous n’avons pas défini de méthode spéciale, l’appel de print(ma_voiture) affichera par défaut l’adresse mémoire de l’objet, ce qui n’est pas très informatif. Pour améliorer cette présentation, nous pouvons définir la méthode spéciale __str__ en utilisant le mot-clé def, avec la syntaxe suivante :

				
					def __str__(self):
    return self.marque
				
			

Ainsi, lorsque nous utilisons print(ma_voiture), la méthode __str__ est appelée et affiche la marque de la voiture plutôt que l’adresse mémoire. Il est possible de retourner n’importe quel attribut ou chaîne de caractères dans __str__.

Utiliser la méthode spéciale len() en Python

Si nous essayons d’utiliser len(ma_voiture), nous obtiendrons une erreur car les objets ne possèdent pas de méthode de longueur par défaut. Pour remédier à cela, nous pouvons définir la méthode spéciale __len__ de la manière suivante :

				
					def __len__(self):
    return len(self.marque)
				
			

Avec cette méthode, len(ma_voiture) renverra la longueur de la chaîne self.marque. En définissant ces méthodes spéciales, nous pouvons personnaliser la façon dont nos objets sont affichés et manipulés dans diverses opérations intégrées.

Le constructeur de classe __init__ en Python

le constructeur de classe est utilisé pour initialiser les attributs d’une instance lors de sa création. Il fait appel à une méthode spéciale, appelée __init__, qui accepte le paramètre self pour faire référence à l’instance en cours, comme illustré dans l’exemple suivant :

				
					class Formateurs:
    def __init__(self, nom, prenom, matiere):
        self.nom = nom
        self.prenom = prenom
        self.matiere = matiere
				
			

Dans cet exemple, nous avons la classe Formateurs, qui possède les attributs nom, prenom, et matiere. Lorsque nous instancions un nouvel objet de cette classe, il est nécessaire de fournir des valeurs pour tous ces attributs. Par exemple :

				
					formateur1 = Formateurs("Dupont", "Jean", "Mathématiques")
				
			

Si ces attributs ne sont pas initialisés correctement, une erreur sera levée, comme le montre l’exemple ci-dessous :

Image illustrant une erreur de type et d'arguments dans une méthode de programmation

Le destructeur de classe __del__ en Python

En Python, le destructeur de classe est une méthode spéciale qui s’occupe de nettoyer les ressources lorsque l’objet est sur le point d’être détruit. Cette méthode magique est appelée __del__ et est définie de manière similaire au constructeur __init__. Toutefois, contrairement à des langages comme le C++ où vous devez gérer la mémoire manuellement, Python intègre un mécanisme de gestion automatique de la mémoire appelé ramassage des ordures (garbage collection). Ce système s’occupe de libérer la mémoire des objets non utilisés sans intervention de votre part. Le destructeur __del__ est appelé lorsque l’objet est sur le point d’être détruit, généralement lorsque le programme se termine ou que l’objet n’est plus référencé. Voici un exemple de classe avec un destructeur :

				
					class Tableau:
    def __init__(self):
        self.data = [1] * 50
    def __del__(self):
        print("Je suis le destructeur...")
        self.data.clear()
t = Tableau()
print(t.data)
				
			

Dans cet exemple, la méthode __del__ est définie pour afficher un message et nettoyer les données lorsque l’objet t est détruit. La sortie du programme affichera le contenu de t.data avant que le destructeur ne soit invoqué. Notez que le moment précis où __del__ est appelé peut dépendre de la gestion de la mémoire par le garbage collector, ce qui peut varier d’une exécution à l’autre.

Les dataclasses en Python

Infos : Les dataclasses sont une fonctionnalité introduite dans Python 3.7 pour faciliter la création de classes conçues principalement pour contenir des données.

Les dataclasses sont simples à lire et à écrire, comme le montre l’exemple suivant :

  • Avant l’introduction des dataclasses :
				
					class Users:
    def __init__(self, username, password, id):
        self.username = username
        self.password = password
        self.id = id
u = Users("bill", "mpass", 123)
print(u.username)
				
			

Dans l’exemple ci-dessus, on peut constater que la définition de la classe Users et l’instanciation peuvent être un peu longues et répétitives.

Avec les dataclasses, cette tâche est simplifiée. On commence par importer dataclass depuis le module dataclasses comme il est montré dans la figure suivante :

				
					from dataclasses import dataclass
				
			

Ensuite, on utilise le décorateur @dataclass pour indiquer que la classe est une dataclass. On peut alors définir la classe de manière plus concise :

				
					from dataclasses import dataclass
@dataclass
class Users:
    username: str
    password: str
    id: int
u = Users("bill", "mpass", 123)
print(u.username)
				
			

Avec cette approche, la classe Users est plus lisible et plus facile à écrire. Le décorateur @dataclass gère automatiquement les méthodes spéciales telles que __init__, __repr__, et __eq__, ce qui simplifie considérablement la gestion des données au sein de la classe.Les dataclasses permettent également d’ajouter des valeurs par défaut pour les attributs, ce qui peut rendre la définition de la classe encore plus flexible.Voici comment vous pouvez définir des valeurs par défaut dans une dataclass:

Méthodes statiques en Python : avantages et applications pratiques

Dans cet exemple :

  • username, password, et id ont des valeurs par défaut.
  • Lorsqu’on crée une instance de Users sans spécifier ces valeurs, les valeurs par défaut sont utilisées.

Cela vous permet de créer des objets avec des valeurs par défaut tout en ayant la possibilité de spécifier des valeurs personnalisées lorsque nécessaire.

Python

Maîtrisez Python et transformez vos idées en projets concrets !

Découvrir cette formation
Guide complet Python pour développeurs et informaticiens 2024

Utiliser une méthode statique en Python

Une méthode statique dans une classe est une méthode qui ne dépend ni des attributs de la classe ni de ses méthodes d’instance. Elle peut être appelée directement sur la classe sans avoir besoin de créer une instance de celle-ci. Contrairement aux méthodes d’instance et aux méthodes de classe, une méthode statique n’a pas accès aux attributs ou aux méthodes de la classe.

Voici comment vous pouvez définir et utiliser une méthode statique :

  • Définition d’une méthode statique : Utilisez le décorateur @staticmethod pour indiquer qu’une méthode est statique. Elle ne prend pas de paramètre spécial comme self ou cls.
  • Appel de la méthode statique : Vous pouvez appeler une méthode statique directement sur la classe sans avoir besoin d’instancier un objet.

Voici un exemple pour illustrer cela :

				
					class Eleve:
    def __init__(self, nom, note):
        self.nom = nom
        self.note = note
    def info(self):
        print(f"Nom : {self.nom}\nNote : {self.note}")
    @staticmethod
    def resultat(note):
        if note > 10:
            print("Admis")
        else:
            print("Non admis")
# Création d'une instance de la classe
e1 = Eleve("Parrin", 9)
e1.info()
# Appel de la méthode statique
Eleve.resultat(12)  # Affiche : Admis
Eleve.resultat(8)   # Affiche : Non admis
Voici le résultat retourner par ce code :
Nom : Parrin
Note : 9
Admis
Non admis
				
			

Dans cet exemple :

  • resultat est une méthode statique, donc elle est définie avec le décorateur @staticmethod et ne prend pas self ou cls comme paramètre.
  • La méthode resultat peut être appelée directement sur la classe Eleve sans créer une instance de celle-ci.
  • Les méthodes statiques sont utiles lorsque vous souhaitez regrouper des fonctions dans une classe qui ne nécessitent pas l’accès aux attributs ou aux autres méthodes de la classe.

Voici quelques avantages de l’utilisation des méthodes statiques dans votre code :

Méthode de classe en Python

Les méthodes de classe sont liées à la classe elle-même, tandis que les méthodes d’instance sont associées aux objets créés à partir de la classe. Supposons que nous avons une classe Ordinateur avec un constructeur qui prend deux attributs : marque et modele. En plus, la classe possède un attribut de classe stock qui doit être décrémenté chaque fois qu’une méthode de vente est appelée. Voici comment on peut gérer cela :

Avant l’utilisation des méthodes de classe, nous aurions quelque chose comme ceci :

				
					class Ordinateur:
    stock = 50  # Attribut de classe
    def __init__(self, marque, modele):
        self.marque = marque
        self.modele = modele
    def venteordi(self):
        if Ordinateur.stock > 0:
            Ordinateur.stock -= 1
        else:
            print("Stock épuisé")
# Instanciation d'un objet
o = Ordinateur("Dell", "XPS")
# Appel de la méthode d'instance
o.venteordi()
print(Ordinateur.stock)  # Affiche : 49
# Appel de la méthode d'instance à nouveau
o.venteordi()
print(Ordinateur.stock)  # Affiche : 48
				
			
Une erreur fréquente est d’essayer d’installer Windows 11 sur du matériel non compatible, ce qui peut entraîner des performances réduites et une instabilité du système.

 

Pour résoudre ce problème et garantir que l’attribut stock est modifié de manière cohérente à travers toutes les instances, on fait recours à une méthode de classe. Cette méthode est clairement liée à la classe elle-même plutôt qu’à une instance spécifique, permettant ainsi une gestion centralisée et cohérente des attributs partagés par toutes les instances.

Voici comment vous pouvez modifier la méthode venteordi pour en faire une méthode de classe :

				
					class Ordinateur:
    stock = 50  # Attribut de classe
    def __init__(self, marque, modele):
        self.marque = marque
        self.modele = modele
    @classmethod
    def venteordi(cls):
        if cls.stock > 0:
            cls.stock -= 1
        else:
            print("Stock épuisé")
# Instanciation d'un objet
o = Ordinateur("Dell", "XPS")
# Appel de la méthode de classe
Ordinateur.venteordi()
print(Ordinateur.stock)  # Affiche : 49
# Appel de la méthode de classe à nouveau
Ordinateur.venteordi()
print(Ordinateur.stock)  # Affiche : 48
				
			
Infos : La méthode de classe prend `cls` comme premier paramètre au lieu de `self`, ce qui permet d’accéder à l’attribut de classe `stock` et de le modifier directement au niveau de la classe.

La méthode venteordi est maintenant une méthode de classe, indiquée par le décorateur @classmethod. Ainsi, les modifications apportées à stock affectent toutes les instances de la classe, car elles se réfèrent toutes au même attribut de classe.

Voici quelques avantages de l’utilisation des méthodes de classe dans votre code :

Méthodes statiques en Python : avantages et applications pratiques

Formez-vous gratuitement avec Alphorm !

Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui. Découvrez des cours variés pour tous les niveaux !

Démarrer gratuitement
illustration processus de paiement en ligne avec étapes claires et convivialité

Conclusion

En maîtrisant les classes Python, vous avez désormais une solide compréhension de l’un des piliers de la programmation orientée objet. La création de classes et l’utilisation des méthodes spéciales permettent de structurer efficacement vos programmes et d’améliorer la réutilisabilité de votre code.

Que ce soit pour définir des attributs, gérer les méthodes statiques ou manipuler les objets, les classes Python offrent une grande flexibilité et puissance. Continuez à explorer ces concepts pour développer des applications robustes et évolutives.

Cet article fait partie du guide Tuto Python Gratuit : Apprenez les Bases et Réalisez des Projets Pratiques, partie 14 sur 23.
< Apprendre la Programmation Orientée Objet en PythonExploiter les propriétés en Python >

ÉTIQUETÉ : Python
Facebook
Twitter
LinkedIn
Email
WhatsApp
Par L'Équipe Alphorm
Démocratiser la Connaissance Informatique pour Tous !
Suivre :
L'Équipe Alphorm, c'est la démocratisation de la connaissance informatique. Passionnés et dévoués, nous sommes là pour vous guider vers le succès en rendant la technologie accessible à tous. Rejoignez notre aventure d'apprentissage et de partage. Avec nous, le savoir IT devient une ressource inspirante et ouverte à tous dans un monde numérique en constante évolution.

Derniers Articles

  • Techniques pour gérer les fichiers texte en C#
  • Créer et lire un fichier CSV avec C#
  • JSON : Comprendre et Utiliser Efficacement
  • Créer une Base SQLite dans C#
  • Lecture des données SQLite simplifiée
Laisser un commentaire Laisser un commentaire

Laisser un commentaire Annuler la réponse

Vous devez vous connecter pour publier un commentaire.

Blog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Définir des Classes en Python

© Alphorm - Tous droits réservés