21.6 Objektphilosophie 

Seitdem in Python 2.3 Datentypen und Klassen vereinigt wurden, ist Python von Grund auf objektorientiert. Das bedeutet, dass im Prinzip alles, womit Sie bei der Arbeit mit Python in Berührung kommen, eine Instanz irgendeiner Klasse ist. Von der einfachen Zahl bis zu den Klassen[ 93 ](Der Datentyp von Klasseninstanzen sind sogenannte Metaklassen, deren Verwendung in diesem Buch nicht behandelt wird. ) selbst hat dabei jedes Objekt seine eigenen Attribute und Methoden.
Insbesondere ist es möglich, von eingebauten Datentypen wie list oder dict zu erben.
Das folgende Beispiel implementiert eine Subklasse von list, die automatisch ihre Elemente nach jeder Veränderung sortiert. Dazu werden alle Methoden von list, die Elemente in die Liste einfügen, so überschrieben, dass im Anschluss an die jeweilige Operation die Liste sortiert wird. Da die Liste sortiert ist, soll ihre Reihenfolge nicht umgekehrt werden können, weshalb der Methode reverse ihre Funktionalität genommen wird.
Für die Realisierung der Methoden wird natürlich weiterhin auf die Implementation von list zurückgegriffen.
class SortierteListe(list):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.sort()
def __setitem__(self, key, value):
super().__setitem__(key, value)
self.sort()
def append(self, value):
super().append(value)
self.sort()
def extend(self, sequence):
super().extend(sequence)
self.sort()
def insert(self, i, x):
super().insert(i, x)
self.sort()
def reverse(self):
pass
def __iadd__(self, s):
erg = super().__iadd__(s)
self.sort()
return erg
def __imul__(self, n):
erg = super().__imul__(n)
self.sort()
return erg
Das nächste Beispielprogramm illustriert die Verwendung der neuen Klasse.
l = SortierteListe([6,4,3])
print(l)
l.append(2)
print(l)
l.extend([67,0,-56])
print(l)
l += [100,5]
print(l)
l *= 2
print(l)
Wie Sie sehen, kann die neue Klasse genauso wie list verwendet werden.[ 94 ](Wir nehmen dabei an, dass eine Ordnungsrelation für die Elemente der Liste existiert. Wenn Sie Elemente einfügen, die sich nicht sortieren lassen, führt dies zu einem Fehler. ) Erst die Ausgaben verdeutlichen den Unterschied in der Funktionsweise.
[3, 4, 6]
[2, 3, 4, 6]
[-56, 0, 2, 3, 4, 6, 67]
[-56, 0, 2, 3, 4, 5, 6, 67, 100]
[-56, -56, 0, 0, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 67, 67, 100, 100]
Obwohl in willkürlicher Reihenfolge eingefügt wurde, sind die Elemente der Liste nach jeder Operation sortiert.