我正在使用 Python 的 traits 包,并且试图找出使用 traits.trait_numeric.Array 类的正确方法。用 Array trait 编写 traits.api.HasTraits 的子类很简单,这样当 Array 更改时,会触发 on_trait_change,但我不知道如何在修改数组元素时触发任何类型的事件到位。这是一个最小的例子:
from traits.api import HasTraits
from traits.trait_numeric import Array
import numpy as np
class C(HasTraits):
x = Array
def __init__(self):
self.on_trait_event(self.do_something, 'x')
def do_something(self):
print 'Doing something'
c = C()
# This line calls do_something()
c.x = np.linspace(0,1,10)
# This one doesn't, and I wish it did
c.x[3] = 100
# Same with this one
c.x[:] = np.ones(c.x.shape)
我希望traits.trait_numeric.Array 有一些我不知道的内置功能,因为检测数组的一部分何时发生变化似乎是一件非常标准的事情。
除此之外,我认为可以通过创建一个也继承 numpy.array 的自定义 trait 类,然后更改 [] 运算符使其显式触发正确类型的 trait 事件来解决这个问题。但希望那是一罐我不必打开的蠕虫。