Automatisches Dekorieren jeder Instanzmethode in einer Klasse

Ich möchte den gleichen Dekorator auf alle Methoden in einer bestimmten Klasse anwenden, mit Ausnahme derjenigen, die mit beginnen und enden__.

Es scheint mir, dass es mit einem Klassendekorateur machbar sein sollte. Gibt es irgendwelche Fallstricke, die Sie beachten sollten?

Idealerweise möchte ich auch in der Lage sein:

Deaktivieren Sie diesen Mechanismus für einige Methoden, indem Sie sie mit einem speziellen Dekorateur markierenAktivieren Sie diesen Mechanismus auch für UnterklassenAktivieren Sie diesen Mechanismus auch für Methoden, die dieser Klasse zur Laufzeit hinzugefügt werden

[Hinweis: Ich verwende Python 3.2, daher geht es mir gut, wenn dies auf kürzlich hinzugefügten Funktionen beruht.]

Hier ist mein Versuch:

<code>_methods_to_skip = {}

def apply(decorator):
  def apply_decorator(cls):
    for method_name, method in get_all_instance_methods(cls):
      if (cls, method) in _methods_to_skip:
        continue
      if method_name[:2] == `__` and method_name[-2:] == `__`:
        continue
      cls.method_name = decorator(method)
  return apply_decorator

def dont_decorate(method):
  _methods_to_skip.add((get_class_from_method(method), method))
  return method
</code>

Hier sind Dinge, mit denen ich Probleme habe:

wie zu implementierenget_all_instance_methods FunktionIch bin mir nicht sicher, ob meinecls.method_name = decorator(method) Zeile ist korrektSo machen Sie dasselbe mit Methoden, die einer Klasse zur Laufzeit hinzugefügt wurdenwie man dies auf Unterklassen anwendetwie zu implementierenget_class_from_method

Antworten auf die Frage(2)

Ihre Antwort auf die Frage