English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La funzione built-in staticmethod() restituisce un metodo statico per la funzione data.
La sintassi di staticmethod() è:
staticmethod(function)
L'uso di staticmethod() è considerato un modo non standard di creare funzioni statiche in Python.
Quindi, nelle versioni più recenti di Python, è possibile utilizzare il decoratore @staticmethod.
La sintassi di @staticmethod è:
staticmethod def func(args, ...)
Il metodo staticmethod() accetta un singolo parametro:
function - La funzione da convertire in metodo statico
staticmethod() restituisce un metodo statico per la funzione passata come parametro.
Metodi statici conMetodi di classeSono molto simili, sono metodi associati alla classe piuttosto che all'oggetto.
Non necessitano di creare un'istanza della classe. Pertanto, non dipendono dallo stato dell'oggetto.
La differenza tra metodi statici e metodi di classe è:
I metodi statici non hanno alcuna conoscenza della classe, trattano solo i parametri.
I metodi di classe vengono utilizzati insieme alla classe, perché i loro parametri sono sempre la classe stessa.
Possono essere chiamati sia attraverso la classe che attraverso gli oggetti della classe.
Class.staticmethodFunc() o anche Class().staticmethodFunc()
class Mathematics: def addNumbers(x, y): return x + y # Creare il metodo statico addNumbers Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('Il totale è:', Mathematics.addNumbers(5, 10))
Risultato di output
Il totale è: 15
I metodi statici hanno limitazioni d'uso, perché come qualsiasi altro metodo nella classe, i metodi statici non possono accedere alle proprietà della classe stessa.
Ma quando hai bisogno di una funzione di utilità che non accede a nessuna proprietà della classe ma sa che appartiene a quella classe, utilizzeremo i metodi statici.
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("Uguale") else: print("Diverso")
Risultato di output
Uguale
Ecco, abbiamo una classe Dates che si applica solo ai date con trattino (-). Ma nel nostro database precedente, tutte le date erano rappresentate con trattino obliquo.
Per convertire la data con trattino di trattino in data con trattino (-), abbiamo creato una funzione di utilità toDashDate in Dates.
Questo è un metodo statico perché non ha bisogno di accedere a nessuna proprietà di Dates stessa, ma solo ai parametri.
Possiamo anche crearlo al di fuori della classe toDashDate, ma poiché è applicabile solo alle date, è logico tenerlo all'interno della classe Dates.
Quando non si desidera che il sottoclasse del metodo specifico del metodo cambi o sovrascriva l'implementazione, si possono utilizzare i metodi statici.
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("Uguale") else: print("Diverso")
Risultato di output
Uguale
Qui, non vogliamo che il sottoclasse DatesWithSlashes sovrascriva il metodo di utilità statico toDashDate, perché ha solo uno scopo, ossia cambiare date in dash-date.
Ri Scrivendo il metodo getDate() del sottoclasse, possiamo facilmente utilizzare i metodi statici per esprimere i nostri vantaggi, in modo che funzionino correttamente insieme alla classe DatesWithSlashes.