Fonction classmethod() – Python

La fonction classmethod() est une fonction intégrée en Python, qui renvoie une méthode de classe pour une fonction donnée.
 
 

Syntaxe:
classmethod(function)

 

Paramètres:

Cette fonction accepte le nom de la fonction comme paramètre.
 

Valeur de retour:

Cette fonction renvoie la méthode de classe convertie.

Les méthodes de classmethod() sont liées à une classe plutôt qu’à un objet. Les méthodes de classe peuvent être appelées à la fois par des classes et par des objets. Ces méthodes peuvent être appelées avec une classe ou avec un objet. Regardons un exemple.
 

Exemple 1:
class Person: 

    # créer une variable
    str = "Welcome to WayToLearnX!"
      
    # créer une fonction
    def show(obj): 
        print("La valeur de str est : ", obj.str) 


# Il ne peut être appelé qu'avec un objet et non avec une classe
Person.show = classmethod(Person.show) 

# maintenant cette méthode peut être appelée comme classmethod 
# la méthode show() est appelée une méthode de classe
Person.show()

Sortie:

La valeur de str est :  Welcome to WayToLearnX!

 
 

Le décorateur @classmethod

Le décorateur @classmethod est un décorateur de fonction intégré qui est une expression qui est évaluée après la définition de votre fonction. Le résultat de cette évaluation masque votre définition de fonction.
 

Syntaxe:
class MaClasse(object):
    @classmethod
    def maFonction(cls, arg1, arg2, ...):

 

Paramètres:

maFonction: la fonction qui doit être convertie en méthode de classe.
 

Valeur de retour:

Renvoie une méthode de classe pour la fonction.
 

  • Une méthode de classe est une méthode qui est liée à la classe et non à l’objet de la classe.
  • Ils ont accès à l’état de la classe car il prend un paramètre de classe qui pointe vers la classe et non l’instance d’objet.
  • Il peut modifier l’état de classe qui s’appliquerait à toutes les instances de la classe. Par exemple, il peut modifier une variable de classe qui serait applicable à toutes les instances.

 
 

Exemple 2:

Dans l’exemple ci-dessous, nous utilisons staticmethod() et classmethod() pour vérifier que le nom de la personne ne dépasse pas 20 caractères.

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def get_person(cls, name):
        return cls(name, "")
        
    @staticmethod  
    def validate_name(p_name):
        return len(p_name) <= 20
        
        
print (Person.validate_name("Alex Babtise"))

Sortie:

True

Méthode statique (@staticmethod ): N’est pas lié à une instance ou à une classe et vous pouvez simplement l’appeler en utilisant le nom de la classe (Person.validate_name()).

Avec staticmethods, ni self (l’instance d’objet) ni cls (la classe) n’est implicitement passé comme premier argument. Ils se comportent comme des fonctions simples, sauf que vous pouvez les appeler à partir d’une instance ou à partir d’une classe.
 
QCM Python

Une réflexion sur “Fonction classmethod() – Python

  • octobre 12, 2022 à 10:22 am
    Permalien

    Mouais. Dans l’exemple 2, je ne vois pas l’utilité de la fonction get_person() qui n’est pas utilisée. De là, l’utilité du classmethod reste totalement inexpliquée.
    Et il faudrait harmoniser. Soit c’est « nom », soit c’est « name ». Mais écrire dans le __init__ () l’instruction self.nom=name amène un NameError.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *