我正在使用Python的traits包,我正在试图找出使用traits.trait_numeric.Array类的正确方法.使用数组特征编写traits.api.HasTraits的子类是很简单的,这样当数组更改时,会触发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)
Run Code Online (Sandbox Code Playgroud)
我希望有一些内置的traits.trait_numeric.Array功能,我不知道,因为检测到数组的一部分已经改变似乎是一个非常标准的事情.
除此之外,我认为这个问题可以通过创建一个自定义特征类来解决,该类也继承了numpy.array,然后更改[]运算符,以便它显式触发正确类型的特征事件.但希望这是一种蠕虫,我不必打开.