Open Source im professionellen Einsatz
Linux-Magazin 06/2009
© iophoto, 1213RF

© iophoto, 1213RF

Dekoratoren in Python

Deko mit Nutzen

Mit Python-Dekoratoren lässt sich die Kernfunktionalität einer Anwendung von der erweiterten Funktionalität trennen. Ein Codebeispiel, das die Berechnung von Fibonacci-Zahlen mit einem Wertecache beschleunigt, demonstriert die Eleganz dieses aspektorientierten Ansatzes.

253

Ein Programmierer schreibt eine Funktion, die Thread-sicher sein muss und außerdem die programmweite Logdatei nutzen soll. Alles, was er dazu tun muss, ist, der Funktion die Auszeichnungen »@synchronized« und »@logging« voranzustellen. Mit Python-Dekoratoren ist eine solch elegante Annotation von Funktionen tatsächlich möglich.

Selbstverständlich muss der Entwickler den für die hinzugefügte Funktionalität erforderlichen Programmcode trotzdem schreiben. Sein nachträgliches Anbinden an bestehende Funktionen eröffnet dennoch interessante Möglichkeiten. Viele Forderungen des aspektorientierten Programmierparadigmas lassen sich mit ihnen umsetzen (Abbildung 1).

Abbildung 1: Der aspektorientierten Programmierung geht es darum, zur Kernfunktionalität orthogonal stehende Seitenaspekte wie Datenvalidierungen getrennt zu entwickeln und erst spät in die Anwendung einzuflechten.

Anwendungsfälle

Dekoratoren sind zum Beispiel nützlich, wenn es darum geht, das implizite Verhalten eines Programms sichtbar zu machen, zum Beispiel Laufzeitverhalten, Programmfluss oder Aufrufhäufigkeit von Funktionen. Funktionen lassen sich außerdem mit Vor- und Nachbedingungen oder beispielsweise mit Cache-Mechanismen ausstatten.

Dieser Artikel zeigt am Beispiel der Fibonacci-Zahlen, wie Dekoratoren den Entwickler zunächst bei der Analyse von Performanceproblemen helfen. Aus den dabei gewonnenen Erkenntnissen ergibt sich, dass ein Caching die Zahl der benötigten Durchläufe stark verringert. Die Performance steigt dabei um weit mehr als den Faktor 1000.

Entflochten

Bei der Software-Entwicklung ist es sinnvoll, Kernfunktionalität und erweiterte Funktionalität wie Sicherheits-Check, Datenvalidierungen oder Protokollierung möglichst sauber zu trennen (Abbildung 1). Die Grundidee der aspektorientierten Programmierung ist es, diese Core-Level-Concerns getrennt von den orthogonal zu ihnen stehenden System-Level-Concerns zu entwickeln und erst im letzten Schritt zu verflechten.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

  • Leserbriefe

    Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an [redaktion@linux-magazin.de]. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.

  • Im Zeichen der Drei

    Mit Python 3.0 hat Sprachschöpfer Guido van Rossum seine Skriptsprache ausgemistet. Nun bringt Python 3.1 noch die Performance in Ordnung. Was muss ein Programmierer beim Umstieg von Python 2.x wissen? Wie und wann portiert er bestehende Skripte auf die neue Sprachversion?

  • Aus dem Labor

    An der Uni Melbourne entstand eine Sprache, die unentbehrliche Programmierparadigmen vereint und bei Geschwindigkeit, Zuverlässigkeit und Skalierbarkeit überzeugt. Das Hightech -Produkt bewährt sich nicht nur in der Forschung, sondern auch in der Praxis.

  • Grumpy verheiratet Python mit Go

    Mit Grumpy hat sich Google ein Tool geschrieben, um Python-Code in Go-Programme umzuwandeln. Damit will das Unternehmen Pythons Problem mit der Nebenläufigkeit lösen.

  • Frei geworden: Kostenloses Lesefutter aus dem Linux-Magazin 06/2009

    Mit Erscheinen des Linux-Magazin 05/2010 sind die Artikel der Linux-Magazin-Ausgabe 06/2009 "Top-Models: Netbooks - Geräte, Preise und passende Distributionen" in den frei zugänglichen Bereich von Linux-Magazin Online gerückt.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

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