Frage

Unser Rahmen erfordert bestimmte Funktionen in einigem hässlichen Standardcode Verpackung:

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

Ich dachte, dies könnte mit einem Dekorateur vereinfacht werden:

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

Allerdings zeigte, dass recht schwierig erwiesen, vor allem, weil der Rahmen für ein bestimmtes Muster von Funktionsnamen auf Modulebene sieht.

Ich habe versucht, die folgende in dem Dekorateur, ohne Erfolg:

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

Jede mögliche Hilfe würde geschätzt!

War es hilfreich?

Lösung

verwenden entweder

current_module.new_name = func

oder

setattr(current_module, new_name, func)

Andere Tipps

Es scheint, die Lösung für Ihr Problem der dekorierten Funktion wirkt als die ursprüngliche Funktion zu machen sei.

Versuchen Sie, die Funktion mergeFunctionMetadata von Verdrehte verwenden, hier: verdrehten / Python / util.py

Es macht Ihre dekoriert Funktion wirkt als das Original, hoffentlich der Rahmen macht es abholen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top