Decorar automáticamente cada método de instancia en una clase.
Quiero aplicar el mismo decorador a todos los métodos en una clase dada, aparte de aquellos que comienzan y terminan con__
.
Me parece que debería ser factible usando un decorador de clase. ¿Hay algún error a tener en cuenta?
Idealmente, también me gustaría poder:
deshabilite este mecanismo para algunos métodos marcándolos con un decorador especialhabilitar este mecanismo para las subclases tambiénhabilite este mecanismo incluso para los métodos que se agregan a esta clase en tiempo de ejecución[Nota: estoy usando Python 3.2, así que estoy bien si esto se basa en las características agregadas recientemente.]
Aquí está mi intento:
<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>
Aquí hay cosas con las que tengo problemas:
como implementarget_all_instance_methods
funciónno estoy seguro si micls.method_name = decorator(method)
la linea es correctacómo hacer lo mismo con cualquier método agregado a una clase en tiempo de ejecucióncómo aplicar esto a las subclasescomo implementarget_class_from_method