Meine eigene "integer" - Objekt in Python
Im wesentlichen möchte ich in der Lage sein, etwas zu tun:
a = Integer(1)
a += 1
print a
Und natürlich drucken die zwei als Ergebnis. Welche Methoden brauche ich, um zu erstellen, um dieses Verhalten in meine Integer-Klasse?
Disclaimer: ich bin nicht der Planung bis verwenden Sie diese für "echt", einfach nur neugierig.
Siehe auch stackoverflow.com/questions/1638229.
Bitte Lesen Sie diese: docs.python.org/library/numbers.html#module-numbers. Nach dem Lesen bitte update Ihre Frage genauer zu sein.
danke, das war gut!
Bitte Lesen Sie diese: docs.python.org/library/numbers.html#module-numbers. Nach dem Lesen bitte update Ihre Frage genauer zu sein.
danke, das war gut!
InformationsquelleAutor Johanna Larsson | 2011-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein einfaches und unvollständiges Beispiel. Sich Methoden
__sub__
,__div__
und so weiter.Dann
BEARBEITEN festen
__repr__
und Hinzugefügt__iadd__
. Dank @Keith für den Hinweis Probleme.BEARBEITEN Festen
__add__
zu ermöglichen, neben der zwischen den ganzen zahlen.__repr__
. Vorgesehen ist die Rückkehr der inverseneval()
sollte und zurückInteger(val)
in diesem Fall. Es ist auch nicht die Erhaltung der Art:Python2> m = Integer(7) Python2> type(m) <class '__main__.Integer'> Python2> m+=5 Python2> type(m) <type 'int'>
gut erkannt, vielen Dank.
Sollte
__str__
.danke, behoben. Auch problem mit
__iadd__
.Sie sollten die Erben von
numbers.Number
, nichtobject
; als pro ncoghlan Antwort unten. Wenn Sie möchten, löschen Sie unerwünschte geerbte Methoden, das ist einfach.InformationsquelleAutor juanchopanza
Nehmen Sie sich zuerst einen kurzen Blick auf die Dokumentation in der Referenz-Anleitung auf die Emulation numerische Typen.
(Nicht zu fest auf, dass - es ist nur um Ihnen eine gewisse Vertrautheit mit den Methoden zugrunde liegende arithmetische Operationen in Python)
Dann finden Sie in der Dokumentation für die
Zahl
- Modul, die alle die Abstrakte Basis-Klassen, die am besten zu emulieren verschiedene Arten von zahlen (z.B.numbers.Integral
für benutzerdefinierte ganze zahlen).InformationsquelleAutor ncoghlan
Können Sie operator überladen:
InformationsquelleAutor Howard
Wenn Sie wollen, um die Operatoren überladen der Standard-cast-to-string-Methode, die phrase, die Sie suchen, ist "magic methods". Dies sind die Methoden, mit Namen wie "
__<name>__
" und werden von python in anderen Fällen als direkte Methodenaufrufe. Würden Sie wollen, um zu definieren, die__add__
und__str__
Methoden für Ihre Klasse, um für die Zeilen 2 und 3, jeweils, zu arbeiten.Erwähnenswert, dass die
__add__
Methode wird aufgerufen, wenn der neue Typ des linken Operanden, und jede Art weitergegeben werden darf als argument. Für die Fälle, bei dir ist der Rechte operand ist, sollten Sie definieren auch die__radd__
Methode. Dies gilt für alle binären Operatoren.Für eine vollständige Liste der magischen Methoden für ein numerischer Typ, siehe Die Emulation Numerische Typen.
InformationsquelleAutor Aaron Dufour
Ich nehme an, Sie wollen, dass Ihr Integer-Klasse verändert werden. Um Ihr Beispiel, das funktioniert:
InformationsquelleAutor Keith
InformationsquelleAutor Nikolay
Versuchen Sie dies:
Dadurch wird eine Klasse, die basiert auf int, die kümmert sich um die
__repr__
,__iadd__
, und__isub__
.InformationsquelleAutor Aiden Blishen Cuneo