如何使用 traitlets 库观察实例成员变量?
How to observe Instance member variables using traitlets library?
我正在尝试在我的代码中使用 ipython 提供的 traitlets 库。假设如果特征是特定 class 的实例,我如何观察 class..
成员的值变化
示例:
class A:
def init(self,val):
self.value = val
class myApp(HasTraits):
myA = Instance(A,kw={'val':2})
如果对象 myA 的 'value' 成员变量发生变化,我想调用一个观察方法。如下所示:
@observe('myA.value')
def onValueChange(self,change):
return
trailets 的实现是否可行?
为了观察实例特征值的变化,实例特征的class应该subclass Hastraits
.
traitlets.observe(*names, **kwargs)
A decorator which can be used to observe Traits on a class.
from traitlets import HasTraits, observe, Instance, Int
class A(HasTraits):
value = Int()
def __init__(self, val):
self.value = val
@observe('value')
def func(self, change):
print(change)
class App(HasTraits):
myA = Instance(klass=A, args=(2,))
app = App()
app.myA.value = 1
{'name': 'value', 'old': 0, 'new': 2, 'owner': <__main__.A object at 0x10b0698d0>, 'type': 'change'}
{'name': 'value', 'old': 2, 'new': 1, 'owner': <__main__.A object at 0x10b0698d0>, 'type': 'change'}
编辑
要在组合 class 中保留更改处理程序,您可以动态设置观察者。
请注意,观察到的属性必须是 属性 的特征。
如果您无权将 class A
修改为 subclass HasTraits
,您可以编写一个 class subclasses HasTraits
即时使用一些 type 魔法。
from traitlets import HasTraits, observe, Instance, Int
class A(HasTraits):
value = Int()
def __init__(self, val):
self.value = val
class App(HasTraits):
myA = Instance(klass=A, args=(2,))
def __init__(self):
super().__init__()
self.set_notifiers()
def set_notifiers(self):
HasTraits.observe(self.myA, func, 'value')
def func(self, change):
print(change)
app = App()
app.myA.value = 1
我正在尝试在我的代码中使用 ipython 提供的 traitlets 库。假设如果特征是特定 class 的实例,我如何观察 class..
成员的值变化示例:
class A:
def init(self,val):
self.value = val
class myApp(HasTraits):
myA = Instance(A,kw={'val':2})
如果对象 myA 的 'value' 成员变量发生变化,我想调用一个观察方法。如下所示:
@observe('myA.value')
def onValueChange(self,change):
return
trailets 的实现是否可行?
为了观察实例特征值的变化,实例特征的class应该subclass Hastraits
.
traitlets.observe(*names, **kwargs)
A decorator which can be used to observe Traits on a class.
from traitlets import HasTraits, observe, Instance, Int
class A(HasTraits):
value = Int()
def __init__(self, val):
self.value = val
@observe('value')
def func(self, change):
print(change)
class App(HasTraits):
myA = Instance(klass=A, args=(2,))
app = App()
app.myA.value = 1
{'name': 'value', 'old': 0, 'new': 2, 'owner': <__main__.A object at 0x10b0698d0>, 'type': 'change'}
{'name': 'value', 'old': 2, 'new': 1, 'owner': <__main__.A object at 0x10b0698d0>, 'type': 'change'}
编辑
要在组合 class 中保留更改处理程序,您可以动态设置观察者。
请注意,观察到的属性必须是 属性 的特征。
如果您无权将 class A
修改为 subclass HasTraits
,您可以编写一个 class subclasses HasTraits
即时使用一些 type 魔法。
from traitlets import HasTraits, observe, Instance, Int
class A(HasTraits):
value = Int()
def __init__(self, val):
self.value = val
class App(HasTraits):
myA = Instance(klass=A, args=(2,))
def __init__(self):
super().__init__()
self.set_notifiers()
def set_notifiers(self):
HasTraits.observe(self.myA, func, 'value')
def func(self, change):
print(change)
app = App()
app.myA.value = 1