使用装饰器的Python方法定义

Q L*_*Liu 5 python methods

有人可以彻底解释以下代码的最后一行:

def myMethod(self):
    # do something

myMethod = transformMethod(myMethod)
Run Code Online (Sandbox Code Playgroud)

为什么要通过另一种方法传递方法的定义?那怎么会起作用呢?提前致谢!

And*_*ark 2

这是函数包装的一个示例,即当您有一个函数接受函数作为参数,并返回一个修改原始函数行为的新函数时。

以下是如何使用它的示例,这是一个简单的包装器,仅在每次调用时打印“Enter”和“Exit”:

def wrapper(func):
    def wrapped():
        print 'Enter'
        result = func()
        print 'Exit'
        return result
    return wrapped
Run Code Online (Sandbox Code Playgroud)

以下是如何使用它的示例:

>>> def say_hello():
...     print 'Hello'
... 
>>> say_hello()  # behavior before wrapping
Hello
>>> say_hello = wrapper(say_hello)
>>> say_hello()  # behavior after wrapping
Enter
Hello
Exit
Run Code Online (Sandbox Code Playgroud)

为了方便起见,Python 提供了装饰器语法,它只是函数包装的简写版本,在函数定义时执行相同的操作,以下是如何使用它:

>>> @wrapper
... def say_hello():
...     print 'Hello'
... 
>>> say_hello()
Enter
Hello
Exit
Run Code Online (Sandbox Code Playgroud)