4

私は 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も継承するカスタム特性クラスを作成し、[]演算子を変更して、適切な種類の特性イベントを明示的にトリガーすることで、問題を解決できると思います。しかし、うまくいけば、それは私が開ける必要のないワームの缶です。

4

1 に答える 1