In Python 3.4, vorrei creare una sottoclasse di float
- qualcosa che può essere utilizzato in operazioni matematiche e booleane come un float
, ma ha altre funzionalità personalizzate e può ricevere un argomento all'inizializzazione che controlla tale funzionalità. (In particolare, volevo avere un parametro personalizzato __str__
e un parametro utilizzato in questo metodo.)Python: una sottoclasse di float può prendere argomenti extra nel suo costruttore?
Tuttavia, non riesco a ottenere una sottoclasse di float
per avere un costruttore funzionale a due argomenti. Perché? Si tratta semplicemente di una limitazione all'estensione dei tipi built-in?
Esempio:
class Foo(float):
def __init__(self, value, extra):
super().__init__(value)
self.extra = extra
Ora, se provo Foo(1,2)
ottengo:
TypeError: float() takes at most 1 argument (2 given)
Sorprendentemente, vengono applicate anche argomenti miei nuovi __init__
's, quindi se lo faccio Foo(1)
ottengo:
TypeError: __init__() missing 1 required positional argument: 'extra'
Qual è l'affare qui? Ho fatto cose simili con i sottotipi di list
e sono rimasto sorpreso che non funzionasse su float
.
correlati: http://stackoverflow.com/questions/1936457/sub-classing-float-type-in- python-fail-to-catch-exception-in-init –
Non una risposta alla tua domanda, ma una soluzione al tuo problema: http://ideone.com/nIPim9 –
Interessante, @ Robᵩ. Sembra che l'override di '__new__' potrebbe essere il modo di fare ciò che voglio, ma non esattamente sicuro su come farlo funzionare ancora. –