我有一个像这样的方法
def update_count(target, value, initiator):
target.count = len(target.collection)
但是,我有三个装饰函数我希望将它应用到
@event.listens_for(MyClass.collection, 'append')
@event.listens_for(MyClass.collection, 'remove')
@event.listens_for(MyClass.collection, 'set')
不是在每个装饰器下面复制整个方法,而是将update_count
传递给每个event.listens_for
装饰器方法作为参考的pythonic方法是什么?
答案 0 :(得分:1)
最简单的:
@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
变体会在一次吞吐中收听所有正在进行的事件,这无疑会提供更好的性能。