Python statisk metode ()

Den indbyggede staticmethod () -funktion returnerer en statisk metode for en given funktion.

Syntaksen for staticmethod()er:

 statisk metode (funktion)

Brug staticmethod()betragtes som en ikke-pythonisk måde at skabe en statisk funktion på.

Derfor kan du i nyere versioner af Python bruge @staticmethoddekoratøren.

Syntaksen for @staticmethoder:

 @staticmethod def func (args, …)

staticmethod () Parametre

Den staticmethod()metode tager et enkelt parameter:

  • funktion - funktion, der skal konverteres til en statisk metode

Returneringsværdi fra staticmethod ()

De staticmethod()returnerer en statisk metode for en funktion, overføres som parameter.

Hvad er en statisk metode?

Statiske metoder, ligesom klassemetoder, er metoder, der er bundet til en klasse snarere end dens objekt.

De kræver ikke oprettelse af en klasseinstans. Så de er ikke afhængige af objektets tilstand.

Forskellen mellem en statisk metode og en klassemetode er:

  • Statisk metode ved intet om klassen og behandler bare parametrene.
  • Klassemetoden fungerer med klassen, da dens parameter altid er selve klassen.

De kan kaldes både af klassen og dens objekt.

 Class.staticmethodFunc () eller endda Class (). StaticmethodFunc ()

Eksempel 1: Opret en statisk metode ved hjælp af 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

 Summen er: 15 

Hvornår bruger du statiske metoder?

1. Gruppering af hjælpefunktion til en klasse

Statiske metoder har et begrænset anvendelsestilfælde, da de ligesom klassemetoder eller andre metoder inden for en klasse ikke kan få adgang til klassens egenskaber.

Men når du har brug for en hjælpefunktion, der ikke har adgang til nogen egenskaber for en klasse, men som giver mening at den hører til klassen, bruger vi statiske funktioner.

Eksempel 2: Opret en hjælpefunktion som en statisk metode

 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

 Lige

Her har vi en Datesklasse, der kun fungerer med datoer med bindestreger. Men i vores tidligere database var alle datoer til stede i skråstreger.

For at konvertere skråstreg-datoer til bindestreg-datoer, har vi oprettet en hjælpefunktion toDashDateindeni Dates.

Det er en statisk metode, fordi den ikke behøver at få adgang til nogen egenskaber for Datessig selv og kun kræver parametrene.

Vi kan også oprette toDashDateuden for klassen, men da det kun fungerer til datoer, er det logisk at holde det inde i Datesklassen.

2. At have en enkelt implementering

Statiske metoder bruges, når vi ikke ønsker underklasser af en klasseændring / tilsidesætter en specifik implementering af en metode.

Eksempel 3: Hvordan arv fungerer med en statisk metode?

 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

 Lige

Her ønsker vi ikke, at underklassen DatesWithSlashestilsidesætter den statiske hjælpemetode, toDashDatefordi den kun har en enkelt anvendelse, dvs. skift dato til bindestreg-datoer.

Vi kunne let bruge den statiske metode til vores fordel ved at tilsidesætte getDate()metoden i underklassen, så den fungerer godt sammen med DatesWithSlashesklassen.

Interessante artikler...