pin*_*ker 10 python python-decorators
我试图理解Python装饰器,我试图写一个等效的程序到这个:
class myDecorator(object):
def __init__(self, f):
print ("inside myDecorator.__init__()")
f() # Prove that function definition has completed
def __call__(self):
print ("inside myDecorator.__call__()")
@myDecorator
def aFunction():
print ("inside aFunction()")
print ("Finished decorating aFunction()")
aFunction()
Run Code Online (Sandbox Code Playgroud)
问题是我不了解如何__call__通过aFunction()最后调用来调用类的方法.
正在aFunction()被取代myDecorator.__call__(aFunction).你能帮我么?没有装饰器的等效程序怎么样?
谢谢!
小智 9
代码的输出是
inside myDecorator.__init__()
inside aFunction()
Finished decorating aFunction()
inside myDecorator.__call__()
Run Code Online (Sandbox Code Playgroud)
首先,你知道吗,@ decorator语法是什么意思?
@decorator
def function(a):
pass
Run Code Online (Sandbox Code Playgroud)
只是另一种说法:
def function(a):
pass
function = decorator(function)
Run Code Online (Sandbox Code Playgroud)
所以,在你的情况下
@myDecorator
def aFunction():
print ("inside aFunction()")
Run Code Online (Sandbox Code Playgroud)
意思就是
def aFunction():
print ("inside aFunction()")
aFunction = myDecorator(aFunction)
Run Code Online (Sandbox Code Playgroud)
首先,您基本上创建了一个myDecorator类的新实例,调用它的构造函数(__init__)并向其传递一个aFunction函数对象.然后,它执行打印和给定的功能.另外,请注意,这是在解释器加载函数时发生的,而不是在执行时加载,所以如果你从这个文件导入一些东西,那么它将被执行,而不是在使用或调用时.
然后,aFunction()当aFunction仍在引用myDecorator实例时,执行,使其调用__call__myDecorator 的方法,该方法执行.注意,这f()意味着与f.__call__(f)在这种情况下相同,因为__call__方法用于启用和覆盖默认对象的调用行为(简化中,任何对象在__call__定义方法时都是可调用的).
如果要在调用时执行aFunction,则应将其分配给实例变量__init__并在__call__myDecorator中调用它.
| 归档时间: |
|
| 查看次数: |
4921 次 |
| 最近记录: |