dinamicamente adicionar funções a um módulo Python
-
06-07-2019 - |
Pergunta
A nossa estrutura requer envolvendo certas funções em algum código clichê feio:
def prefix_myname_suffix(obj):
def actual():
print 'hello world'
obj.register(actual)
return obj
Eu percebi isso pode ser simplificado com um decorador:
@register
def myname():
print 'hello world'
No entanto, isso acabou por ser bastante complicado, principalmente porque os olhares de enquadramento para um determinado padrão de nomes de funções no nível de módulo.
Eu tentei o seguinte dentro do decorador, sem sucesso:
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
Qualquer ajuda seria apreciada!
Solução
Use um
current_module.new_name = func
ou
setattr(current_module, new_name, func)
Outras dicas
Parece que a solução para o problema seria fazer o ato função decorado como a função original.
Tente usar a função mergeFunctionMetadata
de Torcido, encontrada aqui:
torcido / python / util.py
Não faz o seu ato função decorado como o original, espero fazer o enquadramento buscá-lo.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow