私は Python の traits パッケージを使用しており、traits.trait_numeric.Array クラスを使用する正しい方法を見つけようとしています。Array トレイトを使用して 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も継承するカスタム特性クラスを作成し、[]演算子を変更して、適切な種類の特性イベントを明示的にトリガーすることで、問題を解決できると思います。しかし、うまくいけば、それは私が開ける必要のないワームの缶です。