Einfache Architektur
Objektorientiertes Programmieren mit Python
Vergleiche
Möchten Sie zwei Objekte einer Klasse auf eine Weise vergleichen, die nur eine Sortierreihenfolge definiert, steht Ihnen dazu die Methode __cmp__ zur verfügung. Je nachdem, ob der linke Wert kleiner, gleich oder größer als der rechte ist, liefert __cmp__ eine Zahl kleiner, gleich oder größer als Null zurück. Als Beispiel ordnet die folgende Klasse zweidimensionale Vektoren nach ihrem Absolutbetrag:
import math
class Vektor(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __abs__(self):
return math.sqrt(
self.x 2 + self.y 2)
def __cmp__(self, rechts):
return abs(self) - \
abs(rechts)
a = Vektor(1, 2)
b = Vektor(3, -4)
c = Vektor(2, 1)
print a < b # True
print a == b # False
print a == c # True
print b > c # True
Die Methode __cmp__ verwendet hier die eingebaute Funktion abs, die auf die Methode __abs__ aufsetzt. In Python 2.1 kamen sogenannte Rich Comparisons wie __eq__, __lt__ und __ge__ hinzu [3]. Diese Methoden liefern beliebige Objekte zurück.
Falls in eine Klasse keine der Methoden __cmp__, __eq__ oder __ne__ definiert, die eine Reihenfolge festlegen, vergleicht der Interpreter Objekte dieser Klasse anhand ihrer Id (die von der eingebauten Funktion id ermittelt).
Container-Objekte
Python kennt einige Datentypen, zum Beispiel Tupel oder Dictionaries, die wiederum andere Objekte aufnehmen. Solche zusammengesetzten Objekte heißen Container (Behälter). Python erlaubt es, eigene Container zu definieren, die Sequenzen (wie Listen) oder Mappings (wie Dictionaries) nachempfunden sind. Die sinnvollerweise zu definierenden Methoden sind in [4] dokumentiert.
Falls Sie sich fragen, wozu Sie neben den vielseitigen Python-Datentypen eigene Container definieren sollten, schauen Sie sich das Modul shelve[5] an. Sets (Mengen) waren in früheren Python-Versionen übrigens auch als Python-Klassen definiert.



