Pregunta

Nuestro marco requiere que se ajusten ciertas funciones en un código de placa de referencias feo:

def prefix_myname_suffix(obj):
    def actual():
        print 'hello world'
    obj.register(actual)
    return obj

Pensé que esto podría simplificarse con un decorador:

@register
def myname():
    print 'hello world'

Sin embargo, eso resultó ser bastante complicado, principalmente porque el marco busca cierto patrón de nombres de funciones en el nivel de módulo.

He intentado lo siguiente dentro del decorador, sin éxito:

current_module = __import__(__name__)
new_name = prefix + func.__name__ + suffix
# method A
current_module[new_name] = func
# method B
func.__name__ = new_name
current_module += func

Cualquier ayuda sería apreciada!

¿Fue útil?

Solución

utilice cualquiera de estos

current_module.new_name = func

o

setattr(current_module, new_name, func)

Otros consejos

Parece que la solución a su problema sería hacer que la función decorada actúe como la función original.

Intente usar la función mergeFunctionMetadata de Twisted, que se encuentra aquí: twisted / python / util.py

Hace que su función decorada actúe como la original, con suerte haciendo que el marco la recoja.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top