Méthode statique Python ()

La fonction intégrée staticmethod () renvoie une méthode statique pour une fonction donnée.

La syntaxe de staticmethod()est:

 méthode statique (fonction)

L'utilisation staticmethod()est considérée comme une manière non pythonique de créer une fonction statique.

Par conséquent, dans les nouvelles versions de Python, vous pouvez utiliser le @staticmethoddécorateur.

La syntaxe de @staticmethodest:

 @staticmethod def func (args,…)

Paramètres staticmethod ()

La staticmethod()méthode prend un seul paramètre:

  • fonction - fonction qui doit être convertie en une méthode statique

Valeur renvoyée par staticmethod ()

Le staticmethod()renvoie une méthode statique pour une fonction passée en paramètre.

Qu'est-ce qu'une méthode statique?

Les méthodes statiques, tout comme les méthodes de classe, sont des méthodes liées à une classe plutôt qu'à son objet.

Ils ne nécessitent pas de création d'instance de classe. Ainsi, ils ne dépendent pas de l'état de l'objet.

La différence entre une méthode statique et une méthode de classe est:

  • La méthode statique ne sait rien de la classe et ne traite que des paramètres.
  • La méthode de classe fonctionne avec la classe puisque son paramètre est toujours la classe elle-même.

Ils peuvent être appelés à la fois par la classe et son objet.

 Class.staticmethodFunc () ou même Class (). StaticmethodFunc ()

Exemple 1: créer une méthode statique à l'aide de staticmethod ()

 class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))

Production

 La somme est: 15 

Quand utilisez-vous des méthodes statiques?

1. Regroupement d'une fonction utilitaire dans une classe

Les méthodes statiques ont un cas d'utilisation limité car, comme les méthodes de classe ou toute autre méthode au sein d'une classe, elles ne peuvent pas accéder aux propriétés de la classe elle-même.

Cependant, lorsque vous avez besoin d'une fonction utilitaire qui n'accède à aucune propriété d'une classe mais qui a du sens qu'elle appartient à la classe, nous utilisons des fonctions statiques.

Exemple 2: créer une fonction utilitaire en tant que méthode statique

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")

Production

 Égal

Ici, nous avons une Datesclasse qui ne fonctionne qu'avec des dates avec des tirets. Cependant, dans notre base de données précédente, toutes les dates étaient présentes dans des barres obliques.

Afin de convertir les slash-dates en dash-dates, nous avons créé une fonction utilitaire à l' toDashDateintérieur Dates.

C'est une méthode statique car elle n'a besoin d'accéder à aucune propriété d' Dateselle-même et ne nécessite que les paramètres.

Nous pouvons également créer en toDashDatedehors de la classe, mais comme cela ne fonctionne que pour les dates, il est logique de le conserver à l'intérieur de la Datesclasse.

2. Avoir une seule mise en œuvre

Les méthodes statiques sont utilisées lorsque nous ne voulons pas que les sous-classes d'une classe modifient / remplacent une implémentation spécifique d'une méthode.

Exemple 3: Comment fonctionne l'héritage avec la méthode statique?

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")

Production

 Égal

Ici, nous ne voudrions pas que la sous-classe DatesWithSlashesremplace la méthode de l'utilitaire statique toDashDatecar elle n'a qu'une seule utilisation, c'est-à-dire changer la date en dash-dates.

Nous pourrions facilement utiliser la méthode statique à notre avantage en remplaçant la getDate()méthode dans la sous-classe afin qu'elle fonctionne bien avec la DatesWithSlashesclasse.

Articles intéressants...