在Python EPD Traits中,我可以通过属性或方法中的操作来保持依赖于其他变量的变量,这些变量可以处理'master'变量的更改。
我在这里展示了两种方式,首先是属性:
from traits.api import HasTraits, Int, Property
class MyClass(HasTraits):
val = Int
dependent = Property(depends_on = 'val')
def _get_dependent(self):
return 4*self.val
现在有一个特征处理程序:
from traits.api import HasTraits, Int
class MyClass(HasTraits):
val = Int
dependent = Int
def _val_changed(self):
self.dependent = 4*self.val
我的问题是,我什么时候应该使用什么?在研究这个时,我意识到一个区别是,在使用Property的情况下,'dependent'变量变为只读,如果设置如此。但是,让我们说,依赖是真的依赖,我从来没有足够的知识来直接设置它,是否还有我应该注意的差异?
编辑:这与我的other Traits related question类似,但没有直接相关。
答案 0 :(得分:2)
在这种情况下,我肯定会使用一个属性,因为dependent
实际上并没有保留你需要保留的任何有用状态,你只需要访问它。
在某些情况下,第二种变体也很容易爆炸。想象一下,你有更多的依赖项,你将来需要添加更多。每次根据val
添加新成员时,您都必须转到_val_changed
并告知新成员。另一方面,如果您将新成员创建为读取val
的属性,则它与其他成员分开,并且每次添加依赖项时都不会使代码更加混乱。