如果列表在inp中被修改,Traitlets列表将不会运行回调

2024-05-12 17:11:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有列表特性的类,我想在列表被修改时用它来调用函数。你知道吗

class MyClass(traitlets.HasTraits):
    MyTrait = traitlets.List([0]*8, minlen=8, maxlen=8)


Foo = MyClass()


def Bar(change):
    print(change['new'])


Foo.observe(Bar, names='MyTrait')

我的问题是,如果我执行以下操作,Bar就不会被调用:

Foo.MyTrait[0] = 5

如果我想Bar被呼叫,我必须这样做:

MyTraitCopy = Foo.MyTrait.copy()
MyTraitCopy[0] = 5
Foo.MyTrait = MyTraitCopy

这样做似乎不对。有没有更好的方法来注册对列表特征成员的更改的回调?你知道吗


Tags: 列表foomyclassbar特性changelistclass
1条回答
网友
1楼 · 发布于 2024-05-12 17:11:29

我最近经常使用这些小部件,而traitlets似乎无法观察到这样的变化,使用dictionnaries也有同样的问题(有关更多详细信息,请参见https://github.com/ipython/traitlets/issues/496)。你知道吗

在我的项目中,我必须用很少的键来检测词汇值的变化。我给字典添加了一个计数器键,每次更新时我都会重新创建dict。。。但复制似乎是目前唯一的方法。你知道吗

相关问题 更多 >