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