将相同的方法传递给多个装饰器函数
这个问题在这里已经有了答案:
最简单的:
@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
变体就可以提供更好的性能,这个变体可以让所有的事件都被单独监听。