valores una obtener misma metodos listas lista funciona elementos datos comparar como cargar cambiar arreglos agregar python event-handling traits enthought

una - metodos listas python



Lista de rasgos que no informa elementos aƱadidos o eliminados (1)

Parece haber una distinción entre cambiar el valor de la colección como un todo (la List ) y cambiar un miembro dentro de la colección. Agregar parece cambiar un miembro dentro (o al menos da como resultado la misma notificación). Si cambia el valor del contenedor como un todo, realmente obtiene la lista cambiada como el new valor:

from enthought.traits.api import HasTraits, Tuple, Delegate, Trait, Float,Dict,List class Foo(HasTraits): def __init__(self): super(Foo,self).__init__() self.add_trait(''node'',List) def _node_changed(self,name,old,new): print("_node_changed: %s %s %s" % (name, str(old), str(new))) def _node_items_changed(self,name,old,new): print("_node_items_changed: %s %s %s" % (name, str(old), str(new))) f = Foo() # change the List membership with append: f.node.append(0) # _node_items_changed: node_items <undefined> <traits.trait_handlers.TraitListEvent object at 0x10128af50> # change the List itself: f.node = [1,2,3] # _node_changed: node [0] [1, 2, 3] # change a member (same result as append): f.node[1] = 4 # _node_items_changed: node_items <undefined> <traits.trait_handlers.TraitListEvent object at 0x10128af50>

Aquí hay más información, si aún no ha visto esta sección. Ver esta respuesta también.

Dado,

from enthought.traits.api import HasTraits, Tuple, Delegate, Trait, Float,Dict,List class Foo(HasTraits): def __init__(self): super(Foo,self).__init__() self.add_trait(''node'',List) def _node_items_changed(self,name,old,new): print name print old print new

Por qué obtengo:

>>> f = Foo() >>> f.node.append(0) node_items <undefined> <traits.trait_handlers.TraitListEvent object at 0x05BA8CF0>

La documentación dice que debería obtener una lista de elementos agregados / eliminados.

¿Que me estoy perdiendo aqui? Esta es la característica 4.3 en Windows 8.

¡Gracias!