我经常发现自己处于这种状况:
class A:...
B=class
a=Instance(A,())
@on_trait_change('a')##I would really like to be able to do this
def do_something(...)
我认为如果你要重置整个课程,这会触发。例如B = B()。 b.a = A()应该触发它。但我希望控制我的自定义课程何时发出信号已经改变了#39;每个人都可能希望A发出信号并改变信息。如果仅仅改变A的成员,例如b.a.x + = 1
答案 0 :(得分:2)
如果A
和B
都来自HasTraits
,那么将装饰器更改为@on_trait_change('a.+')
即可。如果您将do_something
的签名更改为两个或更多参数,您甚至可以检测a
的哪些属性已更改。 (见http://traits.readthedocs.org/en/latest/traits_user_manual/notification.html#notification-handler-signatures。)