Variable Felder, selbst definiert

Zurück zur Übersicht

             
Achtung, die hier diskutierte Lösung funktioniert nur ab Python 2.2!

Was soll hier gemacht werden. Es geht einfach darum, mit Arrays zu arbeiten, wie es auch unter TPascal ging. Das geht doch längst, wird der Lese hier gegenhalten. Ja es geht, jedoch war immer irgendwas dran, was mich störte. Meist war es die Syntax, die doch ein wenig anders war. Außerdem sollten die Arrays natürlich besser sein als unter TPascal. Zum Beispiel sollte es möglich sein, den einzelnen Elementen eines einzigen Arrays unterschiedliche Variablentypen zuzuweisen, die sich dann während der Laufzeit möglichst noch ändern können. Und ganz nebenher, wenn nämlich erforderlich, sollte auch die Arraygrenze nachträglich nach der Initialisierung noch geändert werden können. Warum brauchen wir dazu Python 2.2? Das ist eine gute Frage, wir brauchen es nicht! Da aber der Aufwand, sich die vielen kleinen Leistungsmerkmale alle ordentlich zu organisieren viel kleiner wird, wenn man die schönen neuen Eigenschaft von Python 2.2 nutzt, und ich eigentlich auch neugierig war, ob das alles wirklich so geht, habe ich es mit Python 2.2 gemacht. Nun geht diese Lösung mit den Vorgängerversionen natürlich nicht mehr. Speziell geht es um die neue Möglichkeit, eigene Klassen auch von den eingebauten Grundtypen abzuleiten.

Ausgangspunkt:

Das zu schaffende Gebilde soll folgende Eigenschaften haben:

- Bei der Definition soll die Anzahl der Dimensionen sowie die Maximalwerte des Indexes zugewiesen werden

- Nach einer Initialisierung sollen alle Elemente auf Anfrage einen definierten Wert zurückgeben

- Eine Anwendung von undefinierten Indexen wird zurückgewiesen

Lösungsansatz:

Es ist unter Python nicht erforderlich, dass wirklich alle Elemente des Feldes von Anfang an existieren. Daher wird ein Dictionary angelegt, das belegte Elemente speichert. Die unbelegten Elemente antworten, durch die Klasse organisiert, mit einem definierten Dummywert. Dieses Dictionary ist eine von "dict" abgeleitete Klasse, der wir die eben genannten Eigenschaften hinzufügen. Dass ein Dictionary seine Einträge ungeordnet aufbewahrt, stört hier nicht, weil die Einträge immer mit Hilfe des Keys gefunden werden. Der Key ist hier der Index, der Eintrag der dazu passende Inhalt des jeweiligen Elements. Alle Felder, die sich noch im Urzustand befinden, werden nicht mit aufgeführt. Ein kleines Beispielprogramm ist hier zu sehen.


Einschub für Fortgeschrittene:

Da wir vollen Zugriff auf die Klasse haben, können wir allerlei nützliches anstellen. So können wir z.B. die Maximalwerte des Feldes nachträglich erhöhen. Falls wir sie reduzieren wollen, was ja auch gehen würde, enthält das Feld danach Einträge, auf die dann nicht mehr zugegriffen werden kann. Sie bleiben aber drin. Vielleicht eine Möglichkeit, Werte während der Laufzeit zu verstecken (hihi). Auch die Dimension könnte verändert werden, aber dann sollten die Einträge durch eine zusätzliche Funktion auf dieneue Organisation transformiert werden.