Python statische methode ()

De ingebouwde functie staticmethod () retourneert een statische methode voor een bepaalde functie.

De syntaxis van staticmethod()is:

 staticmethod (functie)

Gebruiken staticmethod()wordt beschouwd als een niet-pythonische manier om een ​​statische functie te creëren.

Daarom kunt u in nieuwere versies van Python de @staticmethoddecorateur gebruiken.

De syntaxis van @staticmethodis:

 @staticmethod def func (args, …)

staticmethod () Parameters

De staticmethod()methode heeft één parameter nodig:

  • functie - functie die moet worden geconverteerd naar een statische methode

Retourwaarde van staticmethod ()

Het staticmethod()retourneert een statische methode voor een functie die als parameter is doorgegeven.

Wat is een statische methode?

Statische methoden zijn, net als klassemethoden, methoden die eerder aan een klasse dan aan het object zijn gebonden.

Ze vereisen geen creatie van een klasse-instantie. Ze zijn dus niet afhankelijk van de staat van het object.

Het verschil tussen een statische methode en een klassemethode is:

  • Statische methode weet niets over de klasse en behandelt alleen de parameters.
  • Class-methode werkt met de klasse, aangezien de parameter altijd de klasse zelf is.

Ze kunnen zowel door de klasse als door het object worden aangeroepen.

 Class.staticmethodFunc () of zelfs Class (). StaticmethodFunc ()

Voorbeeld 1: maak een statische methode met 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))

Uitvoer

 De som is: 15 

Wanneer gebruik je statische methoden?

1. Groepering van nutsfunctie naar een klasse

Statische methoden hebben een beperkt gebruiksgeval omdat ze, net als klassemethoden of andere methoden binnen een klasse, geen toegang hebben tot de eigenschappen van de klasse zelf.

Als je echter een utility-functie nodig hebt die geen toegang heeft tot de eigenschappen van een klasse, maar wel logisch is dat deze tot de klasse behoort, gebruiken we statische functies.

Voorbeeld 2: maak een hulpprogramma-functie als een statische methode

 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")

Uitvoer

 Gelijk

Hier hebben we een Datesklas die alleen werkt met datums met streepjes. In onze vorige database waren alle datums echter in schuine strepen aanwezig.

Om de slash-dates naar dash-dates te converteren, hebben we een hulpprogramma gemaakt toDashDatebinnen Dates.

Het is een statische methode omdat het geen toegang hoeft te hebben tot enige eigenschappen van Dateszichzelf en alleen de parameters nodig heeft.

We kunnen ook toDashDatebuiten de klas creëren , maar aangezien het alleen voor datums werkt, is het logisch om het binnen de Datesklas te houden .

2. Het hebben van een enkele implementatie

Statische methoden worden gebruikt als we niet willen dat subklassen van een klasse een specifieke implementatie van een methode wijzigen / overschrijven.

Voorbeeld 3: Hoe werkt overerving met een statische methode?

 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")

Uitvoer

 Gelijk

Hier zouden we niet willen dat de subklasse DatesWithSlashesde statische utility-methode overschrijft, toDashDateomdat deze maar één keer gebruikt kan worden, dwz verander de datum in dash-dates.

We zouden de statische methode gemakkelijk in ons voordeel kunnen gebruiken door de getDate()methode in de subklasse te overschrijven , zodat deze goed werkt met de DatesWithSlashesklasse.

Interessante artikelen...