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!

Foi útil?

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
scroll top