python - 如果就地修改列表,Traitlet 列表将不会运行回调

标签 python jupyter-notebook jupyter ipywidgets

我有一个带有列表特征的类,我想在列表修改时使用它来调用函数。

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似乎无法观察到这样的变化,字典也存在同样的问题(更多详细信息请参见https://github.com/ipython/traitlets/issues/496)。

在我的项目中,我必须用几个键来检测字典值的变化。我向字典添加了一个计数器键,并且每次更新时都重新创建了字典...但复制似乎是目前唯一的方法。

关于python - 如果就地修改列表,Traitlet 列表将不会运行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51482598/

相关文章:

python - 在网格中显示图像

python - 为什么仅在带有 python 3.5 的 Jupyter notebook 中给出 SyntaxError : invalid syntax with async def?

python - 如何进行从对象到字典的自定义转换?

python - pandas 根据同一列的值设置列

python - 如何修复ZeroDivisionError : Division by zero?

python - 属性错误 : module 'boto' has no attribute 'plugin'

python - 用 "("和 ")"拆分字符串并保留分隔符 (Python)

删除 jupyter 笔记本上的内核

python - 在 Windows 中单击 .lnk 时出现 Jupyter UTF-8 错误

python - 使用远程 jupyter 笔记本时导入模块的问题