Echte ganzzahlige Teilung
Verfasst: Freitag 1. Februar 2008, 16:19
Ich arbeite mit ganzen Zahltypen, also int oder long, und moechte die Verknüpfung 'a/b' oder 'a//b' umdefinieren, da für mich weder '/' noch '//' besonders geeignet ist. Es soll nie, wie beim derzeitigen Python, ein float ausgegeben werden. Falls bei der Teilung kein Rest entsteht soll ein type(a), also ein int oder long, ausgegeben werden; und falls ein Rest übrigbleibt, soll ein IntegerDivisionError gemeldet werden:
int(k*a) / k ---> int(a) oder IntegerDivisionError
long(k*a) / k ---> long(a) oder IntegerDivisionError
Fragen:
(1) Ist es möglich '/' für normale Zahlen zu überschreiben, oder muss ich Sonderklassen <echter_int> und <echter_long> dafür benutzen? Insbesondere, kann ich zum Beispiel sicherstellen, dass <echter_int> + <int> ---> <echter_int> gilt?
(2) Muss ich sämtliche Operationen, die unverändert bleiben sollen, neu definieren, oder lassen die sich einfach über Vererbung benutzen? Ich stelle fest, dass eingebaute Klassen wie int gar keine ECHTEN Objekte sind (sie haben zum Beispiel kein __dict__-Attribut wie jedes benutzerdefiniertes Objekt).
(3) Muss ich gro3e Performanz -Einbu3en erwarten?
int(k*a) / k ---> int(a) oder IntegerDivisionError
long(k*a) / k ---> long(a) oder IntegerDivisionError
Fragen:
(1) Ist es möglich '/' für normale Zahlen zu überschreiben, oder muss ich Sonderklassen <echter_int> und <echter_long> dafür benutzen? Insbesondere, kann ich zum Beispiel sicherstellen, dass <echter_int> + <int> ---> <echter_int> gilt?
(2) Muss ich sämtliche Operationen, die unverändert bleiben sollen, neu definieren, oder lassen die sich einfach über Vererbung benutzen? Ich stelle fest, dass eingebaute Klassen wie int gar keine ECHTEN Objekte sind (sie haben zum Beispiel kein __dict__-Attribut wie jedes benutzerdefiniertes Objekt).
(3) Muss ich gro3e Performanz -Einbu3en erwarten?