Open Source im professionellen Einsatz
Linux-Magazin 09/2001

Objekt-Persistenz in Python

Schlangenkonserven

In einer neuen Python-Reihe berichtet das Linux-Magazin alle zwei Monate über aktuelle Entwicklungen und stellt Konzepte vor, die Python einzigartig machen. Thema dieser Folge ist die Objekt-Persistenz.

1060

Willkommen zu der neuen Python-Reihe im Linux-Magazin. Hier sollen sowohl Themen für Anfänger als auch für Fortgeschrittene rund um Python behandelt werden. Dazu gehören Berichte über aktuelle Entwicklungen rund um Python und Problemlösungen, aber auch Grundlagen-Artikel zu bestimmten Themen. Der erste Artikel dieser Reihe befasst sich mit der dauerhaften Speicherung von Objekten. Zunächst jedoch ein kurzer Überblick über Python.

Python ist eine Skriptsprache, die Anfang der 90er Jahre von Guido van Rossum entwickelt wurde und sich seither zu einer universell einsetzbaren Programmiersprache gemausert hat. Heute ist Python neben Perl die wichtigste und am häufigsten verwendete Skriptsprache. Wie diese Bezeichnung schon impliziert, ist Python eine interpretierte Sprache, die Übersetzung eines Python-Programms erfolgt zur Laufzeit.

Eine Einführung in Python kann ein Zeitschriftenartikel zwar nicht geben, jedoch sollen einige Konzepte und Vorteile von Python genannt werden. Eine detaillierte Einführung findet man im Python-Tutorial unter http://www.python.org/doc, aber auch im neuen Open-Source-Buch "DiveInto Python" (http://www. diveintopython.org) oder in vielen anderen Büchern.

Python im Überblick

Ein paar Vorzüge und Besonderheiten von Python sollen hier kurz erwähnt werden:

  • n Schnell zu lernen und zu lesen: Python besitzt eine einfache, verständliche Syntax und klare Funktionalität. Im Gegensatz zu Perl lassen sich auch sehr große Projekte erstellen, pflegen - und nach längerer Zeit immer noch verstehen. Der Sprachumfang von Python ist orthogonal, es gibt also in der Regel keine Funktionalität doppelt. Schleifen etwa werden über ein for- oder while-Konstrukte realisiert, repeat- oder do..until-Schleifen sind unnötig.
  • n Modular: Zusammengehörige Funktionalitäten (zum Beispiel Sockets oder grafische Optionen) sind in Modulen zusammengefasst und werden bei Bedarf importiert. Module sind im Sinne von Code-Wiederverwendung von verschiedenen Applikationen nutzbar.
  • n Interaktiv: Python besitzt einen interaktiven Modus, der es gerade Anfängern erlaubt, sich sehr einfach mit Python vertraut zu machen.
  • n Kompakt: Im Vergleich zu Compiler-Sprachen wie C oder C++ sind Python-Programme sehr kompakt. Pythons Datentypen wie Wörterbücher, Listen und Tupel erlauben meist die Formulierung komplexer Operationen in einer Zeile. Der Gliederung eines Programms in Codeblöcke erfolgt durch Indentierung des Quellcodes. Das macht die Klammerung, die man von C kennt, überflüssig.
  • n Objektorientiert: Im Gegensatz zu anderen Programmiersprachen ist Python objektorientiert konzipiert und nicht, wie etwa Perl, nachträglich um objektorientierte Konzepte erweitert worden. Dieses Konzept aus einem Guss hebt Python entscheidend von seiner Konkurrenz ab.

Die wachsende Beliebtheit von Python hat vor allem einen Grund: die klare und einfache Sprachstruktur, die einen leichten Einstieg erlaubt. Mittlerweile wird Python auch bereits an Schulen und Universitäten zur Vermittlung von Programmierkenntnissen eingesetzt.

Python ist jedoch nicht nur für Anfänger interessant, sie ist das schweizer Offiziersmesser für Programmierer. Die Anwendungsbereiche reichen von Web-Applikationen, String-Verarbeitung, administrativen und anderen Anwendungen, numerischen Berechnungen bis hin zur Steuerung komplexer Produktionsumgebungen in Betrieben [1]. Python bietet von sich aus viele nützliche Konzepte, die in anderen Sprachen nicht zu finden sind, zum Beispiel die Ansätze zur Objekt-Persistenz.

Die wichtigsten Neuerungen in Python 2.1

Geschachtelte Namensräume (nested scopes)

Bis Python 2.0 gibt es drei Namensräume, in denen eine Variable in folgender Reihenfolge gesucht wird: lokaler Namesraum, Modul-Namesraum und Built-in-Namensraum. Diese Trennung ist nicht intuitiv, wenn man geschachtelte Funktionen betrachtet:

def f():
      ...
      def g(value):
          ...
          return g(value-1)

Der Aufruf der Funktion g() in der return-Anweisung wird eine Name-Error Exception auslösen, weil g in keinem der drei Namensräume definiert ist. Python 2.1 beseitigt diesen Mangel und erlaubt die Schachtelung von Namensräumen durch den Import des neuen nested_scopes-Moduls.

__future__ Anweisungen

Von Version zu Version werden neue Features in Python eingeführt, die unter Umständen die Kompatibilität zu bestehenden Applikationen brechen. Zur Milderung dieser Problematik können Neuerungen, die zum Beispiel in Python 2.2 fester Bestandteil sein werden, optional über eine __future__-Import-Anweisung eingebunden werden. Geschachtelte Namensräume werden etwa ab 2.2 fester Bestandteil von Python sein. Obwohl die Implementierung bereits abgeschlossen ist, ist sie in Python 2.1 noch nicht aktiviert. Um sie trotzdem benutzten zu können, muss sie über

<b4>from __future__ import nested_scopes

eingebunden und aktiviert werden.

Warning Framework

Im Laufe der Jahre haben sich viele Module angesammelt, die nicht mehr unterstützt werden, veraltet sind oder durch neuere mit verbesserter Funktionalität ersetzt wurden. Es ist für die Entwickler schwierig, Module zu entfernen, ohne dabei zu riskieren, dass Applikationen in späteren Versionen nicht mehr laufen.

Das Warning Framework erlaubt es, versionsabhängige Warnung auszugeben, dass ein Modul in der nächsten Version nicht mehr eingebaut sein wird oder eine Funktionalität geändert oder entfernt wird. Python 2.1 gibt etwa beim Import des regex-Moduls die Warnung aus:

<b1>>> import regex
__main__:1: DeprecationWarning: the regex module ist deprecated; please use
the re module

Benutzer haben so einen Release-Zyklus Zeit, ihre Software auf das neuere Modul re für reguläre Ausdrücke umzustellen.

Funktionsattribute

In Python 2.1 darf man Funktionen Attribute zuweisen:

<b5>
  def func():
      ....
  func.author = "Holger Müller"
  func.security = 1

Alle Attribute sind im Wörterbuch __dict__ der Funktion gespeichert. Bis zu Version 2.0 war es nur möglich, zusätzliche Informationen im so genannten Doc-String zu verbergen, der über f.__doc__ ausgelesen werden konnte.

Neuer Installations-Mechanismus

Die Installation erfolgt ab Version 2.1 mit Hilfe des Dist-Utils-Pakets, also des Standard-Installationswerkzeugs für Python-Module.

Der Aufwand einer händischen Konfiguration der Module wie in den älteren Versionen entfällt damit. Das Installationsskript untersucht automatisch (ähnlich wie Configure) anhand der Header und Bibliotheken, welche Module es kompilieren kann, und baut sie automatisch.

Was ist Objekt-Persistenz?

Objekte sind in jeder objektorientierten Programmiersprache Container von Methoden und Attributen. Bei vielen Applikationen ist es wünschenswert, ein Objekt dauerhaft auf einem Speichermedium abzulegen, um es zu einem späteren Zeitpunkt, beispielsweise nach einem Programmneustart, wieder zu benutzen. Bei einem Programmabbruch kann man dann wieder auf den letzten gespeicherten Zustand des Objekts zurückgreifen.

Es gibt natürlich immer die Möglichkeit, applikationsabhängigen Code zum Export von wichtigen Daten zu schreiben, aber mit jeder Modifikation des Objekts muss auch die Export-Funktionalität entsprechend angepasst werden. Was man sich an dieser Stelle wünscht, ist transparente Objekt-Persistenz, also ein Mechanismus, der es ohne zusätzlichen Code ermöglicht, Objekte dauerhaft zu speichern. Das sollte geschehen, ohne dass der Programmierer oder die Applikation ein besonderes Wissen über Persistenz besitzen muss.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Formel X

    Der Applicationserver Zope erfreut sich als Open-Source-Plattform für Contentmanagement-Systeme großer Beliebtheit. Vor kurzem ist die von Grund auf neu entwickelte Version X3.0 des Python-Framework erschienen. Dieser Beitrag verrät, was sich geändert hat.

  • Plone 4.2.3 bringt HTML 5 und Diazo

    Im neuesten Update rüstet sich das auf Python basierende Content-Management-System für die Zukunft.

  • Tom's Readme

    Wir werfen wie jeden Monat einen Blick auf aktuelle Linux-Entwicklungen und hoffen, den Freaks und Geeks ein paar interessante Anregungen liefern zu können. Schwerpunkt ist diesmal die neunte Python-Konferenz in Long Beach, Kalifornien.

  • Asyl für Django

    Der Trend zu Webapplikationen zwingt einstige HTML-Künstler ins Programmiererlager. Nur, wo schaut man sich einen guten und effizienten Stil ab? Der folgende Artikel beschreibt, wie ein Python-Guru mit Hang zu einem gewissen Django und ein PHP-Papst eine von der Redaktion vorgegebene Aufgabe lösen.

  • Konservierungsmittel

    Spätestens seit den 90er Jahren gehört objektorientiertes Programmieren zum flotten Alltag. Geht es um dauerhafte Speicherung, steigen Entwickler aber immer noch auf ein rostiges Dreirad um. Damit ist Schluss: Die Objektdatenbank Db4o konserviert mit wenigen Zeilen auch komplexe Objektstrukturen.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.