2012-06-09 13 views
19

¿Existen convenciones de nomenclatura "aceptadas" para las entrañas de los decoradores de Python?Convenciones de nomenclatura de Python en decoradores

style guide no lo menciona, y this awesome entry about decorators es bastante consistente en el uso de variantes de "envuelto" para la última función que se devuelve, pero ¿qué ocurre con los nombres utilizados al crear decoradores que toman argumentos?

def decorator_name(whatevs): 
    def inner(function): 
     def wrapped(*args, **kwargs): 
      # sweet decorator goodness 
     return wrapped 
    return inner 

Específicamente, ¿cuáles son las convenciones para inner, function y wrapped en el ejemplo anterior?

Respuesta

17

No existen convenciones estandarizadas (como PEP) para esos nombres. Si comprueba el stdlib de python, encontrará muchos nombres diferentes para esas funciones.

Sin embargo, decorator es un nombre bastante común para la función de decorador inner.
También es común llamar a su función wrappedwrapper y decorarla con functools.wraps(f) con f siendo la función envuelta (func es también un nombre común para ella).

def decorator_name(whatevs): 
    def decorator(f): 
     @wraps(f) 
     def wrapper(*args, **kwargs): 
      pass # sweet decorator goodness 
     return wrapper 
    return decorator 
+5

func podría ser más legible que f. – jfs

+3

Eh, si tiene una función de argumento único llamada 'decorator', entonces está bastante claro cuál es su argumento, no importa cómo se llame. – Ben

+0

Llamar a la función interna 'decorator' es probablemente una muy buena idea, ya que' decorator_name' no es realmente un decorador sino un * decorator factory *, y las múltiples capas de definición de función anidada pueden ser un poco confusas. – Ben

0

Por definición, un decorador en Python podría ser una función o una clase, por lo que el tipo de aplicación (clase o función), es el factor decisivo, que la convención de nombres para su uso. un error común es anteponer el nombre de la función con la palabra clave decorador. para obtener más información acerca de los decoradores, vea link

Cuestiones relacionadas