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 @staticmethod
dekoratøren.
Syntaksen for @staticmethod
er:
@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 Dates
klasse, 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 toDashDate
indeni Dates
.
Det er en statisk metode, fordi den ikke behøver at få adgang til nogen egenskaber for Dates
sig selv og kun kræver parametrene.
Vi kan også oprette toDashDate
uden for klassen, men da det kun fungerer til datoer, er det logisk at holde det inde i Dates
klassen.
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 DatesWithSlashes
tilsidesætter den statiske hjælpemetode, toDashDate
fordi 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 DatesWithSlashes
klassen.