Python staticmethod ()

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 @staticmethoddecoratore.

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 Datesclasse 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à toDashDateall'interno Dates.

È un metodo statico perché non ha bisogno di accedere a nessuna proprietà di Datesse stesso e richiede solo i parametri.

Possiamo anche creare toDashDateal di fuori della classe, ma poiché funziona solo per le date, è logico mantenerlo all'interno della Datesclasse.

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 DatesWithSlashessovrascriva il metodo dell'utilità statica toDashDateperché 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 DatesWithSlashesclasse.

Articoli interessanti...