如何区分事件处理程序触发它的对象是什么

时间:2014-08-22 09:05:47

标签: events plone

我们有一个事件处理程序正在侦听容器内容类型的ObjectModifiedEvent事件。

我们注意到,只要添加容器内的对象,容器就会获得此ObjectModifiedEvent

由于将事件添加到容器中,这个事件处理程序并不关心我们正在寻找一种提前返回的方法,如果这是此事件的触发器。

我们可以使用类似的东西:

if event.__class__ != ObjectModifiedEvent:
    return

似乎事件参数没有足够的信息来确定该事件的根触发器实际上是什么(因为向容器添加对象确实会更改容器),因此检查事件无济于事。

除上述 hack 之外的任何其他想法可以区分它吗?

1 个答案:

答案 0 :(得分:3)

容器发出ContainerModifiedEvent偶数实例,它是ObjectModifiedEvent的子类;您的测试是否有效地测试event是否为子类;一个更好的黑客就是用type(event) not is ObjectModifiedEvent测试类型。

您可以使用以下内容明确过滤掉ContainerModifiedEvent

from zope.container.interfaces import IContainerModifiedEvent

if IContainerModifiedEvent.providedBy(event):
    return

这会验证接口,使其适用于该接口的任何实现。