Sobes.tech
Middle

Comment les méthodes de classe sont-elles implémentées en Python?

sobes.tech IA

Réponse de l'IA

En Python, les méthodes de classe sont implémentées comme des fonctions définies à l'intérieur de la définition de la classe. Elles prennent comme premier argument une instance de la classe (généralement appelée self), ce qui leur permet d'accéder et de modifier les attributs de cette instance. Il existe également des méthodes de classe, liées à la classe elle-même (cls), et des méthodes statiques, qui ne sont liées ni à l'instance ni à la classe.

class MyClass:
    def __init__(self, value):
        # Méthode d'initialisation (constructeur)
        self.value = value

    def instance_method(self):
        # Méthode d'instance classique
        print(f"Valeur de l'instance : {self.value}")

    @classmethod
    def class_method(cls, new_value):
        # Méthode de classe, prend comme premier argument la classe elle-même
        print(f"Création d'une nouvelle instance avec une méthode de classe")
        return cls(new_value * 2) # On peut utiliser cls pour créer de nouvelles instances

    @staticmethod
    def static_method(x, y):
        # Méthode statique, non liée ni à l'instance ni à la classe
        print("Appel de la méthode statique")
        return x + y
Type de méthode Premier argument Accès aux attributs de l'instance Accès aux attributs de la classe Décorateur
Méthode d'instance self Oui Oui (via self.__class__) Non
Méthode de classe cls Non (seulement via l'instance) Oui @classmethod
Méthode statique Aucun Non Non @staticmethod

L'appel des méthodes se fait comme suit :

obj = MyClass(10)

# Appel de la méthode d'instance
obj.instance_method() # Sortie : Valeur de l'instance : 10

# Appel de la méthode de classe
new_obj = MyClass.class_method(5) # Sortie : Création d'une nouvelle instance avec une méthode de classe
print(new_obj.value) # Sortie : 10

# Appel de la méthode statique
result = MyClass.static_method(2, 3) # Sortie : Appel de la méthode statique
print(result) # Sortie : 5