问题
I think the answer is no, but I can't seem to find a definitive claim. I have the following situation;
def decorated_function(function):
@functools.wraps(function)
def my_function():
print "Hello %s" % function.__name__
return my_function
for attr, value in dct.iteritems():
dct[attr] = decorated_function(value)
And what I really want is something like;
def my_function(function):
print "Hello %s" % function.__name__
for attr, value in dct.iteritems():
dct[attr] = functools.wraps(my_function, value)
to remove the confusing shell of decorated_function. Are decorators only possible to apply when the function is defined?
回答1:
You can decorate functions after they have been defined. In fact, function decorators are only syntactic sugar. For example, you can replace
@classmethod
@synchronized(lock)
def foo(cls):
pass
with
def foo(cls):
pass
foo = synchronized(lock)(foo)
foo = classmethod(foo)
See https://www.python.org/dev/peps/pep-0318/ for details.
来源:https://stackoverflow.com/questions/28741965/decorate-a-function-after-it-is-defined