La funzione incorporata staticmethod () restituisce un metodo statico per una data funzione.
La sintassi di staticmethod()
è:
staticmethod (funzione)
L'uso staticmethod()
è considerato un modo non pitonico di creare una funzione statica.
Quindi, nelle versioni più recenti di Python, puoi usare il @staticmethod
decoratore.
La sintassi di @staticmethod
è:
@staticmethod def func (args, …)
parametri staticmethod ()
Il staticmethod()
metodo accetta un singolo parametro:
- funzione - funzione che deve essere convertita in un metodo statico
Valore restituito da staticmethod ()
I staticmethod()
rendimenti di un metodo statico per una funzione passata come parametro.
Cos'è un metodo statico?
I metodi statici, proprio come i metodi di classe, sono metodi legati a una classe piuttosto che al suo oggetto.
Non richiedono la creazione di un'istanza di classe. Quindi, non dipendono dallo stato dell'oggetto.
La differenza tra un metodo statico e un metodo di classe è:
- Il metodo statico non sa nulla della classe e si occupa solo dei parametri.
- Il metodo della classe funziona con la classe poiché il suo parametro è sempre la classe stessa.
Possono essere chiamati sia dalla classe che dal suo oggetto.
Class.staticmethodFunc () o anche Class (). StaticmethodFunc ()
Esempio 1: creare un metodo statico utilizzando 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))
Produzione
La somma è: 15
Quando usi metodi statici?
1. Raggruppamento di funzioni di utilità in una classe
I metodi statici hanno un caso d'uso limitato perché, come i metodi di classe o qualsiasi altro metodo all'interno di una classe, non possono accedere alle proprietà della classe stessa.
Tuttavia, quando hai bisogno di una funzione di utilità che non accede a nessuna proprietà di una classe ma ha senso che appartenga alla classe, utilizziamo funzioni statiche.
Esempio 2: creare una funzione di utilità come metodo statico
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")
Produzione
Pari
Qui abbiamo una Dates
classe che funziona solo con le date con trattini. Tuttavia, nel nostro database precedente, tutte le date erano presenti in barre.
Per convertire le date della barra in date del trattino, abbiamo creato una funzione di utilità toDashDate
all'interno Dates
.
È un metodo statico perché non ha bisogno di accedere a nessuna proprietà di Dates
se stesso e richiede solo i parametri.
Possiamo anche creare toDashDate
al di fuori della classe, ma poiché funziona solo per le date, è logico mantenerlo all'interno della Dates
classe.
2. Avere un'unica implementazione
I metodi statici vengono utilizzati quando non si desidera che le sottoclassi di una classe cambino / sostituiscano un'implementazione specifica di un metodo.
Esempio 3: come funziona l'ereditarietà con il metodo statico?
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")
Produzione
Pari
In questo caso, non vorremmo che la sottoclasse DatesWithSlashes
sovrascriva il metodo dell'utilità statica toDashDate
perché ha solo un uso singolo, cioè cambia la data in trattino-date.
Potremmo facilmente utilizzare il metodo statico a nostro vantaggio sovrascrivendo il getDate()
metodo nella sottoclasse in modo che funzioni bene con la DatesWithSlashes
classe.