méthode de classe() en Python

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

classmethod() dans la syntaxe Python

Syntaxe: méthode de classe (fonction)

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

Type de retour : Cette fonction renvoie la méthode de classe convertie.

Fonction Python classmethod()

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

Méthode de classe vs méthode statique

La différence fondamentale entre le méthode de classe vs méthode statique en Python et quand utiliser la méthode de classe et la méthode statique dans Python .

  • Une méthode de classe prend cls comme premier paramètre tandis qu'une méthode statique n'a besoin d'aucun paramètre spécifique.
  • Une méthode de classe peut accéder ou modifier l’état de la classe tandis qu’une méthode statique ne peut pas y accéder ou le modifier.
  • En général, les méthodes statiques ne savent rien de l’état de la classe. Ce sont des méthodes de type utilitaire qui prennent certains paramètres et travaillent sur ces paramètres. D’un autre côté, les méthodes de classe doivent avoir la classe comme paramètre.
  • Nous utilisons le décorateur @classmethod en Python pour créer une méthode de classe et nous utilisons le décorateur @staticmethod pour créer une méthode statique en Python.

Exemple de méthode de classe en Python

Créer une méthode de classe simple

Dans cet exemple, nous allons voir comment créer une méthode de classe en Python. Pour cela, nous avons créé une classe nommée Geeks avec une variable membre cours et créé une fonction nommée achat qui imprime l'objet. Maintenant, nous avons adopté la méthode Geeks.purchase> dans une méthode de classe en utilisant le @classmethod> décorateur, qui convertit la méthode en méthode de classe. Avec la méthode de classe en place, nous pouvons appeler la fonction achat sans créer d'objet fonction, directement en utilisant le nom de classe Geeks.

Python3




class> geeks:> > course> => 'DSA'> > def> purchase(obj):> > print> (> 'Purchase course : '> , obj.course)> geeks.purchase> => classmethod> (geeks.purchase)> geeks.purchase()>

Sortir

Purchase course : DSA 

Créer une méthode de classe en utilisant classmethod()

Création de la méthode de classe print_name avant de créer cette ligne print_name() Elle ne peut être appelée qu'avec un objet qui n'a pas la classe. Maintenant, cette méthode peut être appelée comme méthode de classe la méthode print_name() est appelée une méthode de classe.

Python3




class> Student:> > # create a variable> > name> => 'Geeksforgeeks'> > # create a function> > def> print_name(obj):> > print> (> 'The name is : '> , obj.name)> # create print_name classmethod> # before creating this line print_name()> # It can be called only with object not with class> Student.print_name> => classmethod> (Student.print_name)> # now this method can be called as classmethod> # print_name() method is called a class method> Student.print_name()>

Sortir

The name is : Geeksforgeeks 

Méthode Factory utilisant une méthode Class

Les utilisations de la fonction classmethod() sont utilisées dans les modèles de conception d'usine où nous souhaitons appeler de nombreuses fonctions avec le nom de classe plutôt qu'un objet.

Python3




# Python program to demonstrate> # use of a class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a> > # Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > def> display(> self> ):> > print> (> 'Name : '> ,> self> .name,> 'Age : '> ,> self> .age)> person> => Person(> 'mayank'> ,> 21> )> person.display()>

Sortir

Name : mayank Age : 21 

Comment fonctionne la méthode de classe pour l’héritage ?

Dans cet exemple, nous créons une hiérarchie de classes Python avec deux classes, Person> et Man> , et démontre l'utilisation des méthodes de classe et de l'héritage.

Python3




from> datetime> import> date> # random Person> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > @staticmethod> > def> from_FathersAge(name, fatherAge, fatherPersonAgeDiff):> > return> Person(name, date.today().year> -> fatherAge> +> fatherPersonAgeDiff)> > @classmethod> > def> from_BirthYear(> cls> , name, birthYear):> > return> cls> (name, date.today().year> -> birthYear)> > def> display(> self> ):> > print> (> self> .name> +> ''s age is: '> +> str> (> self> .age))> class> Man(Person):> > sex> => 'Female'> man> => Man.from_BirthYear(> 'John'> ,> 1985> )> print> (> isinstance> (man, Man))> man1> => Man.from_FathersAge(> 'John'> ,> 1965> ,> 20> )> print> (> isinstance> (man1, Man))>

Sortir

True False 

Python @classmethod Décorateur

Le décorateur @classmethod est un outil intégré décorateur de fonction qui est une expression qui est évaluée une fois votre fonction définie. Le résultat de cette évaluation occulte la définition de votre fonction. Une méthode de classe reçoit la classe comme premier argument implicite, tout comme une méthode d'instance reçoit l'instance.

Syntaxe du décorateur de méthode de classe

classe C (objet):

@méthodeclasse

def amusant(cls, arg1, arg2, …) :

….

Où,

  • amusant: la fonction qui doit être convertie en méthode de classe
  • Retour: une méthode de classe pour la fonction.

Note:

  • Une méthode de classe est une méthode 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 vers l'instance d'objet.
  • Il peut modifier un é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

Dans l'exemple ci-dessous, nous utilisons staticmethod() et classmethod() pour vérifier si une personne est adulte ou non.

Python3




# Python program to demonstrate> # use of a class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a> > # Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > # a static method to check if a> > # Person is adult or not.> > @staticmethod> > def> isAdult(age):> > return> age>> 18> person1> => Person(> 'mayank'> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))>

Sortir

21 27 True