In Python 3.4 möchte ich eine Unterklasse von float
erstellen - etwas, das in mathematischen und booleschen Operationen wie float
verwendet werden kann, aber andere benutzerdefinierte Funktionalität hat und ein Argument bei der Initialisierung erhalten kann, das diese Funktionalität steuert. (Speziell wollte ich eine benutzerdefinierte __str__
und einen Parameter, der in dieser Methode verwendet wird.)Python: Kann eine Unterklasse von float zusätzliche Argumente in ihrem Konstruktor haben?
Allerdings kann ich nicht scheinen, eine Unterklasse von float
zu erhalten, um einen funktionalen Konstruktor mit zwei Argumenten zu haben. Warum? Ist das eine Einschränkung für die Erweiterung von integrierten Typen?
Beispiel:
class Foo(float):
def __init__(self, value, extra):
super().__init__(value)
self.extra = extra
Nun, wenn ich Foo(1,2)
versuche ich bekommen:
TypeError: float() takes at most 1 argument (2 given)
Überraschenderweise meine neue __init__
‚Argumente sind zu erzwungen, also wenn ich Foo(1)
erhalte ich:
TypeError: __init__() missing 1 required positional argument: 'extra'
Was ist der Deal hier? Ich habe ähnliche Dinge mit Subtypen von list
gemacht und war überrascht, dass es nicht auf float
funktioniert.
Verwandte: http://stackoverflow.com/questions/1936457/sub-classing-float-type-in- python-fails-to-catch-ausnahme-in-init –
Keine Antwort auf Ihre Frage, aber eine Lösung für Ihr Problem: http://ideone.com/nIPim9 –
Interessant, @ Robᵩ. Es scheint so, als würde das Überschreiben von "__new__" der Weg sein, um das zu tun, was ich will, aber nicht genau, wie ich diese Arbeit noch machen soll. –