Frage

Ich versuche, einige AOP in meiner Python-Programmierung zu verwenden, aber ich habe keine Erfahrung der verschiedenen Bibliotheken, die es gibt.

Also meine Frage lautet:

  

Welche AOP Unterstützung gibt es für Python? Und was sind die Vorteile der differents Bibliotheken zwischen ihnen?


Bearbeiten

Ich habe einige gefunden, aber ich weiß nicht, wie sie zu vergleichen:

Edit 2

In diesem Zusammenhang werde ich nutzen diese?

Ich habe zwei Anwendungen in Python geschrieben, die in der Regel Methoden haben, die Steuern und anderes Geld Dinge berechnen. Ich möchte in der Lage sein, ein „Skelett“ eine Funktionalität zu schreiben, und es zur Laufzeit anpassen, zum Beispiel der Änderung die Art und Weise lokale Steuer (nach Land oder Staat oder Stadt, etc.) aufgebracht werden, ohne dass die mit zu überlasten Voll Stapel.

War es hilfreich?

Lösung

Edit: Ich nicht mehr pytilities halten und es seit Jahren nicht gewartet. Sie können eine der anderen Antworten zu prüfen, anstelle oder diese Liste auf Wikipedia .

Eine weitere AOP-Bibliothek für Python wäre pytilities ( Dokumentation ; svn Repo ). Es ist derzeit die stärkste (soweit ich weiß).

Seine Eigenschaften sind:

  • machen wieder verwendbare Aspect Klassen
  • gelten mehrere Aspekte auf eine Instanz oder Klasse
  • Unapply Aspekte zu einer Instanz / Klasse
  • fügen Sie neue Attribute zu einer Instanz durch einen Aspekt mit
  • gelten Beratung für alle Attribute einer Instanz / Klasse
  • ...

Es hat auch andere Leckereien wie einige spezielle Deskriptoren (siehe Dokumentation)

Andere Tipps

S.Lott die Verbindung über Python Dekorateure für einige große Beispiele sehen, und sehen Sie die definieren PEP für Dekorateure .

Python hat AOP seit Anfang an, es hat einfach nicht einen eindrucksvollen Namen hat. In Python 2.4 wurde die Dekorateur Syntax hinzugefügt, die Dekorateure sehr schön syntaktisch Anwendung.

macht

Vielleicht, wenn Sie Dekorateure basierend auf Regeln anwenden möchten würden Sie eine Bibliothek benötigen, aber wenn Sie bereit sind, die entsprechenden Funktionen / Methoden zu markieren, wenn Sie erklären, sie werden Sie wahrscheinlich nicht.

Hier ist ein Beispiel für eine einfache Caching Dekorateur (Ich schrieb es für diese Frage ):

import pickle, functools
def cache(f):
  _cache = {}
  def wrapper(*args, **kwargs):
    key = pickle.dumps((args, kwargs))
    if key not in _cache:
      _cache[key] = f(*args, **kwargs) # call the wrapped function, save in cache
    return _cache[key] # read value from cache
  functools.update_wrapper(wrapper, f) # update wrapper's metadata
  return wrapper

import time
@cache
def foo(n):
  time.sleep(2)
  return n*2

foo(10) # first call with parameter 10, sleeps
foo(10) # returns immediately

In Python Aspekt orientierten Programmierung besteht typischerweise aus Klassen und Instanzen dynamisch zur Laufzeit zu modifizieren, die üblicherweise als monkeypatching bezeichnet wird. In einer Antwort auf eine andere Frage AOP, ich zusammengefasst a href einige dieser <= "https://stackoverflow.com/questions/20663/do-you-use-aop-aspect-oriented-programming-in-production-software# 20758" > Anwendungsfälle für AOP in Python .

Anmerkungen Verwendung nicht wirklich AOP ist, weil das Webverfahren etwas hart codiert ist.

Es gibt mehr AOP-Frameworks in Python (I gezählt und verglichen 8 von ihnen, von denen Aspyct der klare Sieger war).

Ich werde ein Papier mit meinen Erkenntnissen auf einer der nächsten Konferenzen veröffentlichen, einschließlich einer realen Industrie Anwendungsfall.

Ich würde beginnen mit der Python Decorator Bibliothek . Vieles von dem, ist AOP Art von Sachen.

Was ist mit dem BSD-Lizenz python-aspectlib ?

  

Implementierungsstatus

     

Weaving Funktionen, Methoden, Instanzen und Klassen abgeschlossen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top