如何在Python使用装饰器来注册回调函数

装饰 回调 函数
长虹饮练  
网友的回答
QQ荔枝蜜

之前一直知道装饰器可以增强一个已经存在的方法,Python也提供了annotation的方法,很好用回. 但是再看答flask login的扩展包的时候. 发现装饰器还可以实现回调函数的注册功能.
flask login就是通过下面的装饰器,来注册回调函数,当没有sessionID时,通过装饰器指定的函数来读取用户到session中.
@login_manager.user_loader
下面写了一个简单的测试例子来演示这个功能.
import time
import functools
class Test():
/**feature将调用callback(), 但是在Test中并没有真正的定义callback**/
def feature(self):
self.callback()
def decorate(self, func):
self.callbackfunc
return func
test Test()
/**将foo注册为回调函数*//
@test.decorate
def foo():
print &39;in foo()&39;
/**调用feature将触发回调函数**/
test.feature()

,一叶一菩提

不知道,可能不能在装饰器跳出主函数吧

rachelliu1

简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数。 比如,有一个函数: de unc(): print 'unc() run.' i '__main__' == __name__: unc() 运行后将输出: unc() ru...

谈情伤感情

通常可以理解它是一个hook 的回调函数。 或者是理解成python 留给二次开发的一个内置API。 一般是用回调和hook 方式实现的。

shangna52088

这篇文章主要介绍了Python合并多个装饰器小技巧,本文用改写调用函数的方式... 装饰器,或者多个,有啥办法把多个合并成一行呢? 上面的函数执行过程应该是 代码如下...

言小旭他妈

s = 'CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT' print len(s) count = 0 or char in range(len(s)): print char '''i list(s()) == 'C': count += 1 else s(char) == 'G': # s(g)是函数的调...1