
Propriétés et méthodes de classe/statiques
Découvrez les propriétés (@property) en Python pour contrôler l'accès aux attributs. Apprenez à utiliser les méthodes de classe (@classmethod) et les méthodes statiques (@staticmethod) pour définir des comportements liés à la classe plutôt qu'à l'instance
Propriétés (`@property`) : contrôlez l'accès aux attributs
Les propriétés vous permettent de contrôler l'accès aux attributs d'un objet. Elles vous permettent de définir des méthodes spéciales (getter, setter, deleter) qui sont appelées automatiquement lorsque vous accédez à un attribut, lorsque vous le modifiez, ou lorsque vous le supprimez.
Au lieu d'accéder directement à un attribut (par exemple, `objet.attribut`), vous pouvez le faire passer par une propriété. Cela vous permet d'ajouter de la logique supplémentaire, comme la validation des données, le calcul de la valeur de l'attribut à la volée, ou le déclenchement d'autres actions.
Pour créer une propriété, vous utilisez le décorateur `@property` avant la méthode getter (la méthode qui renvoie la valeur de l'attribut). Vous pouvez ensuite utiliser les décorateurs `@nom_de_la_propriete.setter` et `@nom_de_la_propriete.deleter` pour définir les méthodes setter et deleter.
Par exemple : `class Cercle: def __init__(self, rayon): self._rayon = rayon; @property def rayon(self): return self._rayon; @rayon.setter def rayon(self, valeur): if valeur < 0: raise ValueError("Le rayon ne peut pas être négatif"); self._rayon = valeur`. Dans cet exemple, l'accès à l'attribut `rayon` est contrôlé par les méthodes `rayon` (getter) et `rayon.setter` (setter).
Nous verrons comment utiliser les propriétés, comment elles améliorent l'encapsulation, et comment elles vous permettent de modifier l'implémentation interne d'une classe sans affecter le code qui utilise cette classe.
Méthodes de classe (`@classmethod`) : méthodes liées à la classe
Les méthodes de classe sont des méthodes qui sont liées à la classe, plutôt qu'à une instance spécifique de la classe. Elles sont appelées sur la classe elle-même, et non sur un objet.
Vous définissez une méthode de classe en utilisant le décorateur `@classmethod` avant la définition de la méthode. Le premier paramètre d'une méthode de classe est toujours `cls`, qui représente la classe elle-même (similaire à `self` pour les méthodes d'instance).
Les méthodes de classe sont souvent utilisées pour créer des constructeurs alternatifs, ou pour effectuer des opérations qui concernent la classe dans son ensemble, plutôt qu'une instance particulière.
Par exemple : `class MaClasse: @classmethod def methode_de_classe(cls, arg): print("Méthode de classe appelée avec", arg, "pour la classe", cls)`. Vous pouvez appeler cette méthode en utilisant `MaClasse.methode_de_classe(valeur)`.
Nous verrons des exemples d'utilisation de méthodes de classe, et comment elles diffèrent des méthodes d'instance.
Méthodes statiques (`@staticmethod`) : fonctions utilitaires
Les méthodes statiques sont des méthodes qui sont liées à la classe, mais qui n'ont pas besoin d'accéder à la classe elle-même (pas de paramètre `cls`). Elles sont similaires aux fonctions normales, mais elles sont définies à l'intérieur de la classe pour des raisons d'organisation.
Vous définissez une méthode statique en utilisant le décorateur `@staticmethod` avant la définition de la méthode. Les méthodes statiques n'ont pas de paramètre spécial comme `self` ou `cls`.
Les méthodes statiques sont souvent utilisées pour regrouper des fonctions utilitaires qui sont liées à la classe, mais qui n'ont pas besoin d'accéder à ses attributs ou à ses méthodes.
Par exemple: `class MaClasse: @staticmethod def methode_statique(arg): print("Méthode statique appelée avec", arg)`. Vous pouvez appeler cette méthode comme suit : `MaClasse.methode_statique(valeur)`.
Nous verrons comment utiliser des méthodes statiques et comment elles se distinguent des méthodes d'instance et des méthodes de classe.