Sauter à un chapitre clé
Créer une classe en Python : Un guide étape par étape
Avant de plonger dans les détails, il est important de comprendre ce qu'est une classe. Une classe est un plan ou un modèle pour créer des objets (une structure de données spécifique) en Python. Elle te permet de définir des attributs et des méthodes qui seront partagés par toutes les instances de la classe.
Définition de la classe
Pour définir une classe en Python, tu utilises le mot cléclass suivi
du nom de la classe et de deux points. La structure générale est la suivante:class Nom de la classe : # corps de la classeDansle corps de la classe, tu peux définir les attributs et les méthodes qui seront partagés par toutes les instances de la classe. Par exemple, créons une
classe de voiture
simple:class Car : # class body pass # Ceci est un espace réservé. Tu dois le remplacer par le contenu réel.
Ajout de méthodes à la classe
Les méthodes sont des fonctions qui opèrent sur l'état de l'objet. En Python, tu peux définir une méthode en utilisant le mot-clédef
, suivi du nom de la méthode et de parenthèses. Dans les parenthèses, tu dois inclure le paramètre self
comme premier argument positionnel. Le paramètre self
fait référence à l'instance de la classe elle-même. Voici un exemple d'ajout de méthodes à la classe
Car:class Car : def start_engine(self) : print("Moteur démarré !") def stop_engine(self) : print("Moteur arrêté !")
Instancier la classe
Pour créer une instance d'une classe en Python, il suffit d'appeler le nom de la classe suivi de parenthèses. Tu peux stocker l'instance dans une variable et accéder ensuite à ses attributs et méthodes en utilisant la notation point. Voici un exemple de création d'une instance de laclasse Voiture
et d'appel de ses méthodes:ma_voiture = Voiture() # Instancie la classe Voiture ma_voiture.start_engine() # Appelle la méthode start_engine ma_voiture.stop_engine() # Appelle la méthode stop_engine.
Pour un exemple plus complet, créons une classe Personne
avec des attributs (nom et âge) et des méthodes (salutation et anniversaire) :
classe Personne : def __init__(self, name, age) : self.name = name self.age = age def greeting(self) : print(f "Bonjour, mon nom est {self.name} et j'ai {self.age} ans.") def birthday(self) : self.age += 1 print(f "Je viens d'avoir {self.age} !") john = Personne("John", 30) john.greeting() # Sortie : Bonjour, je m'appelle John et j'ai 30 ans. john.birthday() # Sortie : Je viens d'avoir 31 ans !
Exploration des classes d'objets en Python
En Python, toutes les classes sont dérivées de la classeobjet
intégrée, soit directement, soit indirectement. La classe objet
sert de classe de base pour toutes les autres classes et fournit des méthodes, des attributs et des comportements communs dont les classes dérivées peuvent hériter. Cela garantit un comportement cohérent dans toutes les classes Python et facilite la réutilisation du code en permettant l'héritage.L'héritage en Python
L'héritage est un concept fondamental de la programmation orientée objet. Il te permet de créer de nouvelles classes basées sur des classes existantes, favorisant ainsi la réutilisation du code et la modularité. En Python, tu peux hériter des attributs et des méthodes d'une classe mère (également appelée classe de base ou superclasse) à une classe enfant (également appelée classe dérivée ou sous-classe). La classe enfant peut alors étendre ou remplacer ces attributs et ces méthodes selon ses besoins.Prenons un exemple simple d'héritage :class Animal : def greet(self) : print("Bonjour, je suis un animal !") class Dog(Animal) : def greet(self) : print("Bonjour, je suis un chien !") dog_instance = Dog() dog_instance.greet() # Output :Bonjour
, je suis un chien!Dans cet exemple, la classe
Chien
hérite de la classe Animal
. Comme la classe Chien
surcharge la méthode greet
, l'appel à dog_instance.greet()
exécutera la méthode définie dans la classe Chien
, et non celle de la classe Animal
.La méthode __init__
La méthode __init__
en Python est une méthode spéciale qui est appelée lorsque tu instancies un nouvel objet à partir d'une classe. Elle est également connue sous le nom de constructeur ou d'initialisateur. Le but de la méthode __init__
est de définir l'état initial (les attributs) de l'objet.
__init__
pour une classe Person
:class Person : def __init__(self, name, age) : self.name = name self.age = ageLorsque tu crées un nouvel objet
Person
, la méthode __init__
est appelée automatiquement et définit les attributs de
nom
et d'âge de
l'objet:john = Person("John", 30) print(john.name) # Output : John print(john.age) # Sortie : 30En matière d'héritage, il est courant d'appeler la méthode
__init__
de la classe mère dans la méthode __init__
de la classe enfant. Cela permet de s'assurer que les attributs de la classe mère sont correctement définis pour la classe enfant. Par exemple, étendons notre exemple précédent d'Animal
et de Chien
pour inclure les méthodes __init__
:class Animal : def __init__(self, species) : self.species = species def greet(self) : print(f "Bonjour, je suis une {espèceself.species} !") class Dog(Animal) : def __init__(self, name) : super().__init__("dog") self.name = name def greet(self) : print(f "Bonjour, je suis {self.name}, une {self.species} !") dog_instance = Dog("Max") dog_instance.greet() # Output : Bonjour, je suis Max, un chien !Remarque l'utilisation de la fonction
super()
dans la méthode __init__
de la classe Dog
pour appeler la méthode __init__
de la classe parentale Animal
. Cela permet de définir l'attribut species
pour l'objet Dog
, et d'ajouter l'attribut name
spécifique à la classe Dog
.Utilisation des propriétés dans les classes Python
En Python, les propriétés sont des attributs dotés d'accesseurs personnalisés, tels que les méthodes getter et setter, qui contrôlent leur accès et leur modification. Cela ajoute un niveau d'abstraction et d'encapsulation dans la classe, te permettant de contrôler la façon dont les attributs sont accédés et modifiés. La clé de la mise en œuvre des propriétés dans les classes Python est l'utilisation de décorateurs. Les décorateurs permettent de modifier ou d'améliorer le comportement des fonctions ou des méthodes avec un minimum de changements syntaxiques. Il existe trois décorateurs bien connus qui sont utilisés pour travailler avec les propriétés en Python : 1.@property
: Ce décorateur déclare une méthode comme étant la méthode d'obtention de l'attribut. 2. @attribute.setter
: Il sert à déclarer la méthode setter pour l'attribut, permettant de modifier la valeur de la propriété.3. @attribute.deleter
: Ce décorateur déclare la méthode permettant de supprimer complètement l'attribut.Implémentation des propriétés en lecture seule
Pour mettre en œuvre une propriété en lecture seule, tu définiras uniquement une méthode getter à l'aide du décorateur@property
. Cela rend l'attribut en lecture seule puisqu'il n'y a pas de méthode setter associée pour modifier sa valeur. Voici un exemple de création d'une classe Circle
avec une propriété en lecture seule pour la surface du cercle:class Circle : def __init__(self, radius) : self.radius = radius @property def area(self) : return 3.14159 * self.radius * self.radiusQuand tu crées un objet
Circle
, tu peux accéder à la propriété areaproperty
comme ceci:my_circle = Circle(5) print(my_circle.area) # Output : 78.53975Remarque que tu accèdes à l'aire sans utiliser de parenthèses, en la traitant comme un attribut plutôt que comme une méthode. Tu recevras une erreur si tu essaies de modifier la surface directement, car il n'y a pas de méthode setter définie pour elle.
Création de paramètres pour les propriétés Python
Pour rendre une propriété modifiable, tu dois définir une méthode setter à l'aide du décorateur@attribute.setter
. Cela te permet de modifier la valeur de la propriété par le biais d'une méthode à accès contrôlé. Étendons la classe Circle
, en créant une méthode setter pour la propriété radius, qui modifie indirectement la surface.classe Cercle : def __init__(self, radius) : self._radius = radius @property def radius(self) : return self._radius @radius.setter def radius(self, new_radius) : if new_radius < 0 : raise ValueError("Radius cannot be negative.") self._radius = new_radius @property def area(self) : return 3.14159 * self.radius * self.radiusDans cet exemple, l'attribut
_radius
est déclaré comme un attribut "privé" et son accès est contrôlé par les méthodes getter et setter. La méthode setter garantit que la valeur de radius ne peut pas être négative, ce qui assure l'intégrité des données. Tu peux maintenant créer un objet Cercle
et modifier son rayon à l'aide de la méthode setter:mon_cercle = Cercle(5) print(mon_cercle.rayon) # Sortie : 5 print(my_circle.area) # Sortie : 78.53975 mon_cercle.rayon = 7 print(mon_cercle.rayon) # Sortie : 7 print(mon_cercle.aire) # Résultat : 153.93807999999998Avec ces exemples, tu peux voir comment les propriétés des classes Python permettent une approche plus contrôlée et encapsulée du travail avec les attributs, améliorant ainsi la structure et l'intégrité de ton code.
Maîtriser les méthodes de classe en Python
En Python, outre les méthodes d'instance standard, il existe deux autres types de méthodes utilisables dans les classes : les méthodes statiques et les méthodes de classe. Ces méthodes diffèrent par la façon dont elles sont liées à la classe et par les arguments qu'elles acceptent. Elles sont définies à l'aide des décorateurs
@staticmethod
et @classmethod
, respectivement.La différence entre les méthodes statiques et les méthodes de classe
Les méthodes statiques :- N'ont accès à aucune donnée ou méthode spécifique à l'instance. Elles fonctionnent avec les arguments d'entrée fournis.
- Ne nécessitent pas d'instance pour être appelées.
- Sont définies à l'aide du décorateur
@staticmethod.
- Ne peuvent pas accéder à des données spécifiques à une classe ou à une instance, ni les modifier.
- conviennent aux fonctions utilitaires qui ne dépendent pas de l'état d'une instance ou de la classe.
class MyClass : @staticmethod def static_method(arg1, arg2) : # Traite les arguments retourne le résultatMéthodes de classe :
- Ont accès aux données et aux méthodes au niveau de la classe.
- Elles n'ont pas besoin d'une instance pour être appelées, mais prennent la classe elle-même comme premier argument, généralement nommé
cls
. - Elles sont définies à l'aide du décorateur
@classmethod.
- Elles peuvent modifier les données spécifiques à la classe mais ne peuvent pas accéder directement aux données spécifiques à l'instance.
- Elles conviennent aux méthodes d'usine, à la modification des données au niveau de la classe ou à l'utilisation de l'héritage.
classe MyClass : @classmethod def class_method(cls, arg1, arg2) : # Traite les arguments en utilisant la classe return result
Quand utiliser chaque méthode
Le choix entre les méthodes statiques et les méthodes de classe dépend de la fonctionnalité spécifique dont tu as besoin : 1. Si ta méthode ne nécessite pas l'accès à des données d'instance ou de classe et sert purement de fonction utilitaire, utilise une méthode statique. Cela améliore la clarté de ton code, car cela indique explicitement qu'aucune donnée d'instance ou de classe n'est modifiée. 2. Si la méthode nécessite l'accès ou la manipulation de données au niveau de la classe ou sert de méthode d'usine pour créer de nouvelles instances, utilise une méthode de classe. Cela garantit que la méthode peut accéder aux données spécifiques à la classe et les modifier si nécessaire. 3. Si la méthode repose sur des données spécifiques à une instance, utilise une méthode d'instance.Méthodes de classe et héritage
Lorsque l'on travaille avec l'héritage, les méthodes de classe peuvent être très utiles. Elles prennent automatiquement la classe sur laquelle elles sont appelées comme premier argument, ce qui leur permet de fonctionner de manière transparente avec l'héritage et la sous-classe. Les méthodes de classe conviennent donc à des tâches telles que la création de constructeurs alternatifs, la gestion des configurations au niveau de la classe ou l'utilisation de données spécifiques à une sous-classe. Voici un exemple illustrant l'utilisation des méthodes de classe dans l'héritage:classe Forme : def __init__(self, sides) : self.sides = sides @classmethod def from_vertices(cls, vertices) : sides = len(vertices) return cls(sides) classe Triangle(Forme) : pass classe Carré(Forme) : pass triangle = Triangle.from_vertices([(0, 0), (1, 1), (1, 2)]) square = Square.from_vertices([(0, 0), (0, 1), (1, 1), (1, 0)]) print(triangle.sides) # Output : 3 print(square.sides) # Output : 4Dans cet exemple, la méthode de classe
from_vertices
peut être appelée sur n'importe quelle sous-classe de Shape
et renverra une instance de cette sous-classe, avec le nombre correct de côtés calculé à partir des sommets fournis. La méthode n'est définie qu'une seule fois dans la classe Shape
, mais elle est utilisable pour toute classe dérivée, ce qui démontre la polyvalence et la compatibilité avec l'héritage des méthodes de classe.Améliorer les classes Python avec les décorateurs de classe
En Python, un décorateur est un appelable qui prend une autre fonction en argument et étend ou modifie son comportement sans changer le code de la fonction d'origine. Les décorateurs de classe ont un objectif similaire mais ciblent spécifiquement les classes au lieu des fonctions. Ils sont utilisés pour modifier ou améliorer le comportement des classes, ce qui permet aux développeurs d'implémenter des fonctionnalités supplémentaires ou de réutiliser le code de manière propre et modulaire.Implémentation des décorateurs de classe personnalisés
Pour créer un décorateur de classe personnalisé, tu dois d'abord définir une fonction ou un objet appelable qui accepte un seul argument, à savoir la classe à décorer. Dans cette fonction, tu peux soit modifier directement la classe d'entrée, soit créer une nouvelle classe qui étend la classe d'entrée, en ajoutant ou en modifiant les méthodes et les attributs nécessaires. Enfin, tu renvoies la classe modifiée ou la classe étendue, complétant ainsi le décorateur. Voici un exemple de décorateur de classe personnalisé simple qui ajoute une méthodegreet
à une classe donnée :def add_greet_method(cls) : def greet(self) : print(f "Bonjour, je suis une instance de la classe {cls.__name__}.") # Ajoute la méthode greet à la classe cls.greet = greet return cls @add_greet_method class MyClass : pass instance = MyClass() instance.greet() # Output : Bonjour, je suis une instance de la classe MyClass.Dans cet exemple, le décorateur
add_greet_method
ajoute la méthode greet
à la classe MyClass
. Lorsque tu crées une instance de la classe MyClass
, la méthode greet est ajoutée à la classe MyClass.Décorateurs de classe intégrés en Python
Python fournit également des décorateurs de classe intégrés qui peuvent être utilisés pour améliorer les classes de différentes manières : 1.@property
: Ce décorateur indique qu'une méthode est un getter pour un attribut. Cela te permet de définir des propriétés en lecture seule ou calculées sur ta classe au lieu d'accéder directement aux variables d'instance. 2. @attribute.setter
: Il est utilisé pour définir une méthode setter pour une propriété. Les méthodes getter et setter doivent porter le même nom. Cela permet de contrôler la modification d'un attribut sans accéder directement aux variables d'instance. 3. @staticmethod
: Ce décorateur est utilisé pour définir une méthode statique dans une classe. Les méthodes statiques ne sont pas liées aux instances et n'ont pas accès aux données ou méthodes spécifiques à l'instance. Elles sont appelées en utilisant la classe elle-même comme destinataire. 4. @classmethod
: Elle est utilisée pour définir une méthode qui est liée à la classe et non à l'instance. Elle prend la classe elle-même comme premier argument. C'est utile lorsque tu veux une méthode qui peut être appelée sur la classe elle-même et non sur ses instances, ce qui est généralement utilisé pour les méthodes d'usine ou les méthodes de configuration. Dans l'ensemble, les décorateurs de classe fournissent un moyen puissant et élégant d'améliorer les classes Python avec des fonctionnalités supplémentaires, ce qui permet d'améliorer l'encapsulation, la réutilisation du code et la modularité. Ils t'aident à écrire un code plus propre, plus facile à maintenir et plus efficace tout en respectant les principes de conception de la programmation orientée objet.Les classes en Python - Principaux enseignements
Les classes en Python : Une classe est un plan ou un modèle pour créer des objets en Python, te permettant de définir des attributs et des méthodes qui seront partagés par toutes les instances de la classe.
Classe d'objets en Python : Toutes les classes sont dérivées de la classe
objet
intégrée, ce qui facilite la réutilisation du code et la cohérence de toutes les classes Python grâce à l'héritage.Propriétés dans les classes Python : Les propriétés sont des attributs dotés d'accesseurs personnalisés, tels que les méthodes getter et setter, qui permettent de contrôler l'accès et la modification des attributs de la classe.
Méthode de classe en Python : Outre les méthodes d'instance standard, les classes Python peuvent avoir des méthodes statiques et des méthodes de classe, définies respectivement à l'aide des décorateurs
@staticmethod
et@classmethod
.Décorateurs de classe en Python : Les décorateurs de classe sont utilisés pour modifier ou améliorer le comportement des classes, ce qui permet aux développeurs d'implémenter des fonctionnalités supplémentaires ou de réutiliser le code de manière propre et modulaire.
Apprends plus vite avec les 26 fiches sur Classes en Python
Inscris-toi gratuitement pour accéder à toutes nos fiches.
Questions fréquemment posées en Classes en Python
À propos de StudySmarter
StudySmarter est une entreprise de technologie éducative mondialement reconnue, offrant une plateforme d'apprentissage holistique conçue pour les étudiants de tous âges et de tous niveaux éducatifs. Notre plateforme fournit un soutien à l'apprentissage pour une large gamme de sujets, y compris les STEM, les sciences sociales et les langues, et aide également les étudiants à réussir divers tests et examens dans le monde entier, tels que le GCSE, le A Level, le SAT, l'ACT, l'Abitur, et plus encore. Nous proposons une bibliothèque étendue de matériels d'apprentissage, y compris des flashcards interactives, des solutions de manuels scolaires complètes et des explications détaillées. La technologie de pointe et les outils que nous fournissons aident les étudiants à créer leurs propres matériels d'apprentissage. Le contenu de StudySmarter est non seulement vérifié par des experts, mais également régulièrement mis à jour pour garantir l'exactitude et la pertinence.
En savoir plus