English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base di Python

Controllo dei flussi in Python

Funzione in Python

Tipi di dati in Python

Operazioni di file in Python

Oggetti e classi in Python

Data e ora in Python

Conoscenze avanzate di Python

Manuale di Python

Uso e esempio di staticmethod() in Python

Funzioni native di Python

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, ...)

Parametro di staticmethod()

Il metodo staticmethod() accetta un singolo parametro:

  • function - La funzione da convertire in metodo statico

Valore di ritorno di staticmethod()

staticmethod() restituisce un metodo statico per la funzione passata come parametro.

Cos'è un metodo statico?

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()

Esempio 1: Creare un metodo statico utilizzandostaticmethod()

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

Quand'è utile utilizzare i metodi statici?

1. Raggruppare le funzioni di utilità in una classe

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.

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("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.

2. Implementazione singola

Quando non si desidera che il sottoclasse del metodo specifico del metodo cambi o sovrascriva l'implementazione, si possono utilizzare i metodi statici.

Esempio 3: Come lavorano l'ereditarietà e i metodi statici insieme?

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.

Funzioni native di Python