`
flyfoxs
  • 浏览: 297482 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

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

 
阅读更多

之前一直知道装饰器可以增强一个已经存在的方法,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.callback=func
        return func

test =  Test()


#/**将foo注册为回调函数*//
@test.decorate
def foo():
    print 'in foo()'

#/**调用feature将触发回调函数**/    
test.feature()

 

 

分享到:
评论

相关推荐

    Python装饰器限制函数运行时间超时则退出执行

    ### Python装饰器限制函数运行时间超时则退出执行 在实际开发过程中,有时我们需要对某些函数的执行时间进行限制,即如果一个函数的执行超过了预设的时间,那么该函数将被强制停止执行,以避免长时间的阻塞或不必要...

    python构建自定义回调函数详解

    在Python中,我们可以利用对象的方法和属性机制来创建回调函数。 下面的例子展示了如何构建一个基础的自定义回调系统: ```python class BaseHandler(object): def crawl(self, url, **kwargs): if kwargs.get('...

    Python回调函数用法实例详解

    回调函数在Python编程中是一种强大的工具,主要用于在特定事件或条件满足时,让一个函数能够调用另一个函数。本文将深入探讨回调函数的概念、工作原理,并通过实例来演示其使用。 首先,回调函数的定义简单来说就是...

    python中的闭包函数

    闭包在实际编程中非常有用,它不仅可以用于创建工厂函数,还能在装饰器、回调函数、对象属性私有化等领域发挥作用。通过使用闭包,我们可以使程序更加模块化,增加代码的重用性,同时还能有效地保护数据不被外界随意...

    python重试装饰器的简单实现方法

    装饰器的工作原理是:当被装饰的函数在执行过程中遇到指定的异常时,它会等待一段延迟时间后再次尝试执行,直到达到最大重试次数或者满足其他停止条件(如回调函数返回True或验证函数返回False)。这个过程可以通过`...

    Python库 | wrapt-1.13.0rc1-cp38-cp38-win32.whl

    5. **回调和代理模式**:wrapt提供了在装饰器内部注册回调函数的能力,这些回调会在原函数执行前后被调用。此外,它还支持创建对象的代理,以便在操作对象属性或方法时插入自定义行为。 6. **错误处理**:通过wrapt...

    Python-用于在Python34中进行协程驱动的基于异步的泛型编程的小工具库

    在Python 3.4之前,异步编程主要依赖于回调函数,这可能导致回调地狱,使代码难以理解和维护。随着Python 3.5引入了asyncio库,协程编程变得更加优雅,但在3.4版本中,类似的功能可能需要自定义的库来支持。 在...

    python高阶闭包练习题

    这种机制允许我们创建可定制的函数工厂,动态地定义行为,或者实现类似于回调、装饰器等功能。 以下是一些关于Python高阶闭包的重要知识点: 1. **作用域规则**:理解LEGB(Local, Enclosing, Global, Built-in)...

    python设计模式及源码

    Python的事件驱动编程和回调函数就是观察者模式的体现。 阅读“精通Python设计模式”这本书,你将学习如何在实际项目中有效地应用这些模式,理解它们的原理和最佳实践。配合源代码文件,你可以更直观地看到这些模式...

    Python实现Event回调机制的方法

    不同于C#中的`event`,Python提供了多种实现方式,包括但不限于使用装饰器、元类或直接使用列表存储回调函数。以下是一种Pythonic的实现方式: ```python class UIDataEvent: _events = {} # 存储所有事件实例的...

    Python-huey小型多线程任务队列

    4. **回调函数**:可以定义任务完成后的回调函数,进一步处理任务的结果或进行其他操作。 5. **错误处理**:huey提供了一套完整的错误处理机制,可以捕获和记录任务执行过程中的异常,确保系统稳定运行。 6. **...

    python课件

    在Python的高级特性中,还包括__slots__、生成器、迭代器、闭包、装饰器、导入模块、循环导入、作用域、深拷贝与浅拷贝、进制与位运算、私有化属性、property以及其他一些内建属性和内建函数等知识点。其中,__slots...

    Python-3.7.6.rar

    3. **非局部(Nonlocal)变量**:Python 3.7允许在内嵌函数中修改外部函数的局部变量,通过`nonlocal`关键字实现,这对于编写闭包和回调函数很有帮助。 4. **确保字符串字面量不变(Frozen String Literals)**:在...

    Python-一个轻量级面向对象的Python有限状态机实现

    2. **配置事件和转换**:使用`transitions`装饰器或`Machine.add_transition`方法定义事件触发的状态转换,例如`@transition(source='initial', target='active', event='start')`表示在收到'start'事件时,系统从'...

    python基于Tornado实现,系统核心调度,可分布式扩展

    你可以注册回调函数,当特定的事件发生时,如网络连接、数据接收或定时器触发,这些函数会被调用。 对于系统核心调度,通常会涉及到任务的分配、状态跟踪和异常处理。Tornado的异步特性使得我们可以轻松地实现这些...

    Python可视化交互库——dash

    5. **Data Binding**:Dash的一大亮点是其数据绑定机制,用户界面的改变可以直接反映到Python回调函数中,反之亦然,从而实现数据的双向交互。 6. **Callbacks**:在Dash中,回调是应用的核心,通过`@app.callback`...

    python-》pil selenium hook

    在Selenium的上下文中,"hook"可能意味着在某些特定事件(如页面加载完成)发生时,设置回调函数来执行额外的逻辑。例如,你可能会使用hook来确保在开始自动化测试前,网页已经完全加载。在Python 2.7中,这可能需要...

    Python-asyncio一个给Python33使用的asyncio模块从Python34开始asyncio已经被纳入标准库

    8. **中间件**:asyncio支持装饰器和上下文管理器来处理异常、日志记录等,这些功能可以通过自定义`BaseEventLoop`的子类或实现`BaseProtocol`来扩展。 在实际应用中,asyncio可以极大地提高性能,特别是对于I/O...

Global site tag (gtag.js) - Google Analytics