Méthode de classe vs méthode statique en Python

Dans cet article, nous aborderons les bases différence entre la méthode de classe et la méthode statique en Python et quand utiliser la méthode de classe et la méthode statique en python.

Qu’est-ce que la méthode de classe en Python ?

Le décorateur @classmethod est un décorateur de fonction intégré 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. UN méthode de classe reçoit la classe comme premier argument implicite, tout comme une méthode d'instance reçoit l'instance

Méthode de classe Python de syntaxe :

 class C(object):  @classmethod  def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function. 
  • Une méthode de classe est une méthode liée au 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 sera applicable à toutes les instances.

Qu'est-ce que la méthode statique en Python ?

Une méthode statique ne reçoit pas de premier argument implicite. Une méthode statique est également une méthode liée à la classe et non à l'objet de la classe. Cette méthode ne peut pas accéder ou modifier l’état de la classe. Elle est présente dans une classe car il est logique que la méthode soit présente en classe.

Syntaxe Python Méthode statique :

 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun. 

Méthode de classe vs méthode statique

La différence entre la méthode Class et la méthode statique est la suivante :

  • 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 @classmethod decorator en python pour créer une méthode de classe et nous utilisons @staticmethod decorator pour créer une méthode statique en python.

Quand utiliser la classe ou la méthode statique ?

  • Nous utilisons généralement la méthode de classe pour créer des méthodes d'usine. Les méthodes d'usine renvoient des objets de classe (similaires à un constructeur) pour différents cas d'utilisation.
  • Nous utilisons généralement des méthodes statiques pour créer des fonctions utilitaires.

Comment définir une méthode de classe et une méthode statique ?

Pour définir une méthode de classe en python, nous utilisons @classmethod decorator, et pour définir une méthode statique, nous utilisons @staticmethod decorator.
Regardons un exemple pour comprendre la différence entre les deux. Disons que nous voulons créer une classe Person. Désormais, Python ne prend pas en charge la surcharge de méthodes comme C++ ou Java, nous utilisons donc des méthodes de classe pour créer des méthodes d'usine. Dans l'exemple ci-dessous, nous utilisons une méthode de classe pour créer un objet personne à partir de l'année de naissance.

Comme expliqué ci-dessus, nous utilisons des méthodes statiques pour créer des fonctions utilitaires. Dans l'exemple ci-dessous, nous utilisons une méthode statique pour vérifier si une personne est adulte ou non.

Un exemple simple :

méthode de classe :

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > def> get_value(> self> ):> > return> self> .value> # Create an instance of MyClass> obj> => MyClass(> 10> )> # Call the get_value method on the instance> print> (obj.get_value())> # Output: 10>

Sortir

10 

Méthode statique : -

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > @staticmethod> > def> get_max_value(x, y):> > return> max> (x, y)> # Create an instance of MyClass> obj> => MyClass(> 10> )> print> (MyClass.get_max_value(> 20> ,> 30> ))> print> (obj.get_max_value(> 20> ,> 30> ))>

Sortir

30 30 

Vous trouverez ci-dessous la mise en œuvre complète

Python3




# Python program to demonstrate> # use of 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 25 True 

Espace auxiliaire : O(1)