繁体   English   中英

HasTraits覆盖继承的getter / setter方法

[英]HasTraits overiding inherited getter/setter methods

我想使用多重继承将HasTraits与标准python object混合。 当我这样做时,标准对象的getter / setter方法无法正常工作。 下面的示例演示了这一点。

from traits.api import HasTraits


class A(object):
    @property
    def name(self):
        print 'getter'
        try:
            return self._name
        except(AttributeError):
            return 'nobody'

    @name.setter
    def name(self, val):
        print 'setter'
        self._name = val.upper()

class B(A, HasTraits):
    pass


b = B()
b.name  #calls getter 

b.name = 'name' # doesnt call setter
b.name # doesnt call getter

我认为这是因为HasTraits类拦截了标准的get / set方法。 有没有解决的办法?

我很确定没有办法使本机python装饰器@property很好地发挥特质。 至少,没有任何合理的清洁方式。

但是traits具有其自己的带有getter和setter的Property概念。 您可以定义一个Property特征,作为简单的获取/设置程序即可完成您想要的工作。

class B(A, HasTraits):
    this_name = Property
    def _get_this_name(self):
      return self.name
    def _set_this_name(self, value):
      self.name = value

并且,如果您将包含PropertyHasTraits子类HasTraits ,则特定于特征的吸气剂/设定剂效应将保留在子类中。 因此,没有理由-也就是说,如果您已经想要在程序中对特征进行类型检查-首先使用@property装饰器,而不要使用Property getter。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM