Non è possibile, non è mai necessario e non lo si desidera.
In Python, tutto è un oggetto. Le classi sono cose, quindi sono oggetti. Quindi sono metodi.
C'è un oggetto chiamato A
che è una classe. Ha un attributo chiamato stackoverflow
. Può avere solo uno di questi attributi.
Quando si scrive def stackoverflow(...): ...
, ciò che accade è che si crea un oggetto che è il metodo e assegnarlo all'attributo stackoverflow
di A
. Se si scrivono due definizioni, la seconda sostituisce la prima, allo stesso modo in cui il compito si comporta sempre.
Inoltre, non si desidera scrivere codice che faccia il più selvaggio dei tipi di cose a cui viene talvolta utilizzato il sovraccarico. Non è così che funziona la lingua.
Invece di cercare di definire una funzione separata per ogni tipo di cosa che potrebbe essere dato (che ha poco senso dal momento che non si specificano i tipi di parametri di funzione in ogni caso), smettere di preoccuparsi di ciò che le cose sono e inizio pensando a cosa possono fare do.
Non solo non è possibile scrivere uno separato per gestire una tupla contro un elenco, ma anche non si desidera o è necessario.
Tutto ciò che si fa è sfruttare il fatto che entrambi sono, ad esempio, iterabili (ad esempio, è possibile scrivere for element in container:
). (Il fatto che non siano direttamente correlati per eredità è irrilevante.)
fonte
2012-04-18 06:24:51
In Python, pensare di metodi come un insieme particolare di "* * attributi", e non ci può essere un solo "attributo * *" (e quindi un metodo) di un nome per un oggetto. L'ultimo metodo * sovrascrive * qualsiasi metodo precedente. In Java, i metodi non sono cittadini di prima classe (non sono "attributi di oggetti"), ma sono piuttosto invocati da "invio di messaggi" che sono risolti staticamente in base al tipo più vicino (che è il punto in cui * overloading * entra). –
vedere anche http://stackoverflow.com/questions/733264/function-overloading-in-python-missing – agf
e http://stackoverflow.com/questions/6434482/python-function-overloading – agf