2016-05-14 2 views
0

Ich möchte etwas Aktion in eine dekorierte Funktion einfügen, aber ich möchte nicht die Codes dieser Funktion zu berühren. Kann ich Aktionen einfügen, wenn ich die Dekoratoren definiere? Nur hinzufügen, nicht löschen.Gibt es eine Möglichkeit, einige Aktionen innerhalb einer verzierten Funktion einzufügen

def real_decorator(func): 
    def __decorator(): 
     print 'enter the func' 
     func() # <- Can I insert some action inside this from here? 
     print 'exit the func' 
    return __decorator 


@real_decorator 
def decorated_function(): 
    print "I am decorated" 


decorated_function() 
+0

Was meinst du mit Einfügen Aktionen? Führen Sie zusätzlichen Code in einer bestimmten Zeile in decorated_function aus? – Schore

+0

Ja, indem Sie auf den Coderahmen zugreifen, aber Sie möchten Ihr Design wirklich überdenken. Decorators sollen mit * any * Funktion verwendet werden, und das Hinzufügen von Zufallscode in einen könnte zu unbeschreiblichem Schaden führen. Die Frage ist also, warum willst du das tun? – cdarke

Antwort

1

Wie ist das?

def real_decorator(func): 

    def __decorator(): 
     print 'enter the func' 
     for action in __decorator.extra_actions: 
      action() 
     func() 
     print 'exit the func' 

    __decorator.extra_actions = [] 

    return __decorator 

@real_decorator 
def decorated_function(): 
    print "I am decorated" 

decorated_function() 

def new_action(): 
    print "New action" 

decorated_function.extra_actions.append(new_action) 

decorated_function() 
Verwandte Themen