如果就地修改列表,Traitlets 列表不会 运行 回调
Traitlets List won't run callback if the list is modified in-place
我有一个 class 具有列表特征,我想在列表被修改时使用它来调用函数。
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
这似乎不是执行此操作的正确方法。有没有更好的方法来注册对 List 特征成员更改的回调?
我最近一直在玩小部件,traitlets does not seem to be able to observe such changes, there is the same problem with dictionnaries (see https://github.com/ipython/traitlets/issues/496了解更多详情)。
在我的项目中,我必须用几个键来检测字典值的变化。我在字典中添加了一个计数器键,每次更新时我都重新创建了字典...但是复制似乎是目前唯一的方法。
我有一个 class 具有列表特征,我想在列表被修改时使用它来调用函数。
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
这似乎不是执行此操作的正确方法。有没有更好的方法来注册对 List 特征成员更改的回调?
我最近一直在玩小部件,traitlets does not seem to be able to observe such changes, there is the same problem with dictionnaries (see https://github.com/ipython/traitlets/issues/496了解更多详情)。
在我的项目中,我必须用几个键来检测字典值的变化。我在字典中添加了一个计数器键,每次更新时我都重新创建了字典...但是复制似乎是目前唯一的方法。