Python statisk metod ()

Den inbyggda funktionen staticmethod () returnerar en statisk metod för en given funktion.

Syntaksen för staticmethod()är:

 statisk metod (funktion)

Användning staticmethod()betraktas som ett icke-pythoniskt sätt att skapa en statisk funktion.

Därför kan du i nyare versioner av Python använda @staticmethoddekoratören.

Syntaksen för @staticmethodär:

 @staticmethod def func (args, …)

staticmethod () Parametrar

Den staticmethod()metod tar en enda parameter:

  • funktion - funktion som behöver konverteras till en statisk metod

Returvärde från staticmethod ()

De staticmethod()återvänder en statisk metod för en funktion skickas som parameter.

Vad är en statisk metod?

Statiska metoder, precis som klassmetoder, är metoder som är bundna till en klass snarare än dess syfte.

De behöver inte skapa en klassinstans. Så de är inte beroende av objektets tillstånd.

Skillnaden mellan en statisk metod och en klassmetod är:

  • Statisk metod vet ingenting om klassen och hanterar bara parametrarna.
  • Klassmetoden fungerar med klassen eftersom dess parameter alltid är själva klassen.

De kan kallas både av klassen och dess objekt.

 Class.staticmethodFunc () eller till och med Class (). StaticmethodFunc ()

Exempel 1: Skapa en statisk metod med 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))

Produktion

 Summan är: 15 

När använder du statiska metoder?

1. Gruppera verktygsfunktion till en klass

Statiska metoder har ett begränsat användningsfall eftersom de, som klassmetoder eller andra metoder inom en klass, inte kan komma åt klassens egenskaper.

Men när du behöver en verktygsfunktion som inte har tillgång till några egenskaper hos en klass men som är vettigt att den tillhör klassen använder vi statiska funktioner.

Exempel 2: Skapa en verktygsfunktion som en statisk metod

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

Produktion

 Likvärdig

Här har vi en Datesklass som bara fungerar med datum med bindestreck. I vår tidigare databas var dock alla datum i snedstreck.

För att konvertera slash-dates till dash-dates har vi skapat en verktygsfunktion toDashDateinom Dates.

Det är en statisk metod eftersom den inte behöver komma åt några egenskaper i sig Datessjälv och bara kräver parametrarna.

Vi kan också skapa toDashDateutanför klassen, men eftersom det bara fungerar för datum är det logiskt att hålla det inne i Datesklassen.

2. Att ha en enda implementering

Statiska metoder används när vi inte vill att underklasser av en klassändring / åsidosätter en specifik implementering av en metod.

Exempel 3: Hur arv fungerar med statisk metod?

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

Produktion

 Likvärdig

Här skulle vi inte vilja att underklassen DatesWithSlashesåsidosätter den statiska verktygsmetoden toDashDateeftersom den bara har en enda användning, dvs. byter datum till bindedatum.

Vi kan enkelt använda den statiska metoden till vår fördel genom att åsidosätta getDate()metoden i underklassen så att den fungerar bra med DatesWithSlashesklassen.

Intressanta artiklar...