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

Respuestas a la pregunta(2)

Su respuesta a la pregunta