[英]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
并且,如果您将包含Property
的HasTraits
子类HasTraits
,则特定于特征的吸气剂/设定剂效应将保留在子类中。 因此,没有理由-也就是说,如果您已经想要在程序中对特征进行类型检查-首先使用@property
装饰器,而不要使用Property
getter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.