Automatyczne dekorowanie każdej metody instancji w klasie

Chcę zastosować ten sam dekorator do każdej metody w danej klasie, poza tymi, które zaczynają się i kończą__.

Wydaje mi się, że powinno być wykonalne za pomocą dekoratora klas. Czy są jakieś pułapki, o których należy pamiętać?

Idealnie chciałbym również móc:

wyłącz ten mechanizm dla niektórych metod, zaznaczając je specjalnym dekoratoremwłącz ten mechanizm również dla podklaswłącz ten mechanizm nawet w przypadku metod dodawanych do tej klasy w czasie wykonywania

[Uwaga: Używam Pythona 3.2, więc jest dobrze, jeśli opiera się na dodanych ostatnio funkcjach.]

Oto moja próba:

<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>

Oto rzeczy, z którymi mam problemy:

jak wdrożyćget_all_instance_methods funkcjonowaćnie jestem pewien, czy mójcls.method_name = decorator(method) linia jest poprawnajak zrobić to samo z każdą metodą dodaną do klasy w czasie wykonywaniajak zastosować to do podklasjak wdrożyćget_class_from_method

questionAnswers(2)

yourAnswerToTheQuestion