编辑/澄清以使我的问题具体到我的查询:
*我可以看到装饰器静态日志函数是如何调用的,但我不知道如何调用_被调用以及它的结果如何是log的结果。我看到了输入/输入内容是如何工作的*
class logger:
@staticmethod
def log(func):
def ___(*args, **kwargs):
try:
print "Entering: [%s] with parameters %s" % (func.__name__, args)
try:
return func(*args, **kwargs)
except Exception, e:
print 'Exception in %s : %s' % (func.__name__, e)
finally:
print "Exiting: [%s]" % func.__name__
return ___
class x:
@logger.log
def first_x_method(self):
print 'doing first_x_method stuff...'
x().first_x_method()
给出这个输出:
Entering: [first_x_method] with parameters (<__main__.x instance at 0x0000000001F45648>,)
doing first_x_method stuff...
Exiting: [first_x_method]
我可以看到 logger 是一个带有静态方法的类,用于装饰(@logger.log
) 第一个_x_方法。
但是我不明白为什么___
sub 方法(可以是任何名称)被调用。
关于装饰器的基本事实是
@decorator
def func(): ...
完全等于
def func(): ...
func=decorator(func)
So,
@logger.log
def first_x_method(self): ...
是相同的
def first_x_method(self): ...
first_x_method=logger.log(first_x_method)
所以logger.log
带参数调用静态方法func = first_x_method
.
在通话中logger.log(first_x_method)
,子方法__
被定义并返回。
first_x_method=logger.log(first_x_method)
因此设置first_x_method
参考子方法__
.
括号中的first_x_method()
告诉Python调用该方法first_x_method
.
So x().first_x_method()
首先实例化类x的实例,然后调用方法first_x_method
(x() 作为第一个参数提供)。
Since first_x_method
指的是__
, it is __
被调用的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)