Objekte

Objekte in Python

(Bisher war hier nur eine Übersetzung von http://effbot.org/zone/python-objects.htm)

Sinn und Zweck von Objektorientierung

Objektorientierung ist ein Mittel, um Programme so zu strukturieren, dass diese auch bei relativ hoher Komplexität noch überschau- und wartbar bleiben. Python verlangt daher nicht, selbst kleinste Aufgaben objektorientiert lösen zu müssen, ist jedoch selbst konsequent objektorientiert. Das heißt, bei allem, womit ich in Python arbeite (Strings, Listen, Dictionaries etc.), handelt es sich um Objekte. Objekte besitzen Attribute und bieten Methoden an, um sie zu verändern. Objekte werden aus Klassen erzeugt und mit Namen versehen, dabei kann jedes Objekt mit mehreren Namen versehen werden.

Objekte

Methoden

Klassen

Namen

Namen sind eine andere Baustelle - sie sind keine Eigenschaften eines Objekts, und das Objekt kennt seine Namen nicht.

Ein Objekt kann sehr viele Namen haben, oder auch gar keinen.

Namen existieren in Namensräumen (z.B. ein Modul-Namensraum, der Namensraum einer Instanz oder einer Funktion).

Namensräume sind Ansammlungen von Paaren aus Name und Objektreferenz. Sie werden mit Dictionaries implementiert.

Wenn du eine Funktion oder Methode aufrufst, wird ihr Namensraum mit den Argumenten vorbelegt (die Namen kommen von der Parameterliste, die Objekte vom Aufruf).

Zuweisungen

Zuweisungen verändern Namensräume, nicht Objekte.

Das heißt,

 name = 10

trägt den Namen name in den lokalen Namensraum ein, und lässt ihn auf ein Integerobjekt zeigen, das den Wert 10 enthält.

Wenn es den Namen schon im Namensraum gibt, ersetzt die Zuweisung den vorhandenen Eintrag:

 name = 10
 name = 20

bedeutet, dass zuerst der Name name im lokalen Namensraum an ein Integerobjekt mit dem Wert 10 gebunden wird. Dann wird der Name neu gebunden, und der Eintrag im Namensraum verweist nun auf ein anderes Integerobjekt mit dem Wert 20. Das erste Objekt, die 10, betrifft das nicht, und es kümmert sich nicht darum.

Anders verhält es sich mit:

 name = []
 name.append(1)

Hier wird zuerst der Name name im lokalen Namensraum an ein leeres Listenobjekt gebunden, was den Namensraum verändert. Dann rufst du eine Methode dieses Objekts auf, worauf die Liste ein Integerobjekt an sich anfügt. Das verändert den Inhalt des Listenobjekts, aber betrifft den Namensraum nicht, genauso wie das Integerobjekt.

Zu guter Letzt: name.attr und name[index] sind nur hübsche Syntax für Methodenaufrufe. Das erste entspricht __setattr__ und __getattr__, das zweite __setitem__ und __getitem__ (je nachdem, ob sie auf der linken Seite einer Zuweisung stehen oder nicht).

Das wars.

Objekte (last edited 2010-03-12 12:35:06 by MichaelKallas)