Agregar dinámicamente funciones a un módulo de Python
-
06-07-2019 - |
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!
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.