使用Properties或trait处理程序设置因变量之间的区别

时间:2012-03-31 20:29:18

标签: python traits

在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类似,但没有直接相关。

1 个答案:

答案 0 :(得分:2)

在这种情况下,我肯定会使用一个属性,因为dependent实际上并没有保留你需要保留的任何有用状态,你只需要访问它。

在某些情况下,第二种变体也很容易爆炸。想象一下,你有更多的依赖项,你将来需要添加更多。每次根据val添加新成员时,您都必须转到_val_changed并告知新成员。另一方面,如果您将新成员创建为读取val的属性,则它与其他成员分开,并且每次添加依赖项时都不会使代码更加混乱。