[Python-de] Subclassing int

Gerson Kurz Gerson.Kurz at t-online.de
Mon May 26 19:52:19 EDT 2003


Ich habe heute mal versucht, eine Klasse, die bisher so aussah:

class bisher:
    def __init__(self):
        self.wert = 123

    ... (+ n Methoden, die self.wert verändern) ...


durch eine Klasse

class neu(int):

zu ersetzen. Das ganze habe ich ziemlich schnell aufgegeben, mit ein bisserl
Enttäuschung. Schluchz. Sieh her:

class neu(int):
    def __init__(self, value):
        int.__init__(self, 2)

a = neu(1)

Preisfrage: Was macht "print a" ? Es gibt 1 aus! (Die "Dokumentation"
("Whats New in Python 2.2.txt") ist ein bisserl arg mager, IMHO))

Des weiteren: Ich kann den Wert meines ints nicht ändern! Nun ist mir ja
bekannt, daß int immutable ist, aber sieh dir mal folgendes an:

class bisher:
    def __init__(self):
        self.wert = 123
        print "ID im Konstruktor:", id(self.wert)

    def assign(self, value):
        self.value = value
        print "ID nach assign:", id(self.wert)

a = bisher()
a.assign(60)

...
ID im Konstruktor: 7627404
ID nach assign:    7627404

Meine laienhafte Vermutung: die Runtime nimmt automatisch das gleiche Objekt
wieder her, oder es gibt so einen Objectcache (dunkel wabert derartiges in
den zugegebenermaßen leeren Hallen meines Erinnerungsvermögens).

Das ganze kann ich aber mit meiner "neu"-Klasse nicht machen. Selbst
todesmutige Versuche wie

class neu(int):
    def __init__(self, value):
        int.__init__(self, 2)

    def assign(self, value):
        self = neu(value)

a = neu(1)
a.assign(3)

scheitern. Schade aber toll, oder?





More information about the Python-de mailing list