当项目是 class 的实例时,列表项目更改监控

List items change monitoring when items are instances of class

使用以下代码:

from traits.api import HasTraits, List, Int, Instance, on_trait_change

class A(HasTraits):
    value = Int(0)

class B(HasTraits):
    lst = List(Instance(A,()))

    @on_trait_change('lst[]')
    def _update(self):
        print('changed')

'changed' 在项目更改时打印,如:

b = B(lst = [A()]) 

如何在列表项的 内部 更改时触发事件,如:

b.lst[0].value=1

您可以使用语法 container:attribute_name 侦听包含在对象中的实例的属性。请参阅下面 _item_update 方法的装饰器:

from traits.api import HasTraits, List, Int, Instance, on_trait_change

class A(HasTraits):
    value = Int(0)

class B(HasTraits):
    lst = List(Instance(A,()))

    @on_trait_change('lst[]')
    def _update(self):
        print('changed')

    @on_trait_change('lst:value')
    def _item_update(self, name, new):
        print(name, new)

b = B(lst = [A()]) 
b.lst[0].value=1

这将打印:

changed
('value', 1)

Semantics" section of the documentation shows all the possible patterns. The following section, on Notification Handler Signatures,列出了可能的侦听器方法签名。