将相同的方法传递给多个装饰器函数

这个问题在这里已经有了答案:

  • 如何创建一个函数装饰器链? 15个答案

  • 最简单的:

    @event.listens_for(MyClass.collection, 'append')
    @event.listens_for(MyClass.collection, 'remove')
    @event.listens_for(MyClass.collection, 'set')
    def update_count(target, value, initiator):
        target.count = len(target.collection)
    

    即,在def之前将装饰器依次放置。

    当然,这可能会导致开销,例如,如果每个装饰器将装饰后的函数包装到另一个装饰器中 - 但是如果无法修复装饰器,则无法避免该开销。 如果你可以改变装饰器,那么一个listen_multi变体就可以提供更好的性能,这个变体可以让所有的事件都被单独监听。

    链接地址: http://www.djcxy.com/p/23819.html

    上一篇: pass same method to multiple decorator functions

    下一篇: custom route decorator