Question

Notre framework nécessite d’emballer certaines fonctions dans un code passe-partout laid:

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

J'ai pensé que cela pourrait être simplifié avec un décorateur:

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

Cependant, cela s’est avéré plutôt délicat, principalement parce que le framework cherche un certain modèle de noms de fonctions au niveau du module.

J'ai essayé ce qui suit chez le décorateur, mais en vain:

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

Toute aide serait appréciée!

Était-ce utile?

La solution

utiliser soit

current_module.new_name = func

ou

setattr(current_module, new_name, func)

Autres conseils

Il semble que la solution à votre problème serait de faire en sorte que la fonction décorée soit la fonction d'origine.

Essayez d’utiliser la fonction mergeFunctionMetadata de Twisted, trouvée ici: twisted / python / util.py

Cela fait que votre fonction décorée joue le rôle de l'original, en faisant en sorte que le cadre le récupère.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top