traits api 创建新的 trait 和 trait 改变的行为

traits api creating new trait and trait changed behavior

我经常发现自己处于这种情况:

class A:...

B=class
    a=Instance(A,())
    @on_trait_change('a')##I would really like to be able to do this
    def do_something(...)

我认为,如果您要重置整个 class,这目前会触发。例如b=B()。 b.a=A() 应该触发它。但是我想控制我的自定义 class 何时发出信号表明它已经 'changed'。如果仅仅改变了 A 的一个成员,也许有人可能希望 A 发出 'changed' 信号,例如b.a.x+=1

如果 AB 都派生自 HasTraits,那么将装饰器更改为 @on_trait_change('a.+') 即可。如果您将 do_something 的签名更改为两个或更多参数,您甚至可以检测到 a 的哪些属性发生了变化。 (参见 http://traits.readthedocs.org/en/latest/traits_user_manual/notification.html#notification-handler-signatures。)