我有一个超类,定义了一个属性及其setter方法,代码如下:
class A(object):
def __init__(self):
self._mode = None
@property
def mode(self):
# to be overriden in subclass to implement the actual getter code
raise NotImplementedError
@mode.setter
def mode(self, value):
# common assertions and input validations
self._set_mode(value)
def _set_mode(self, value):
# to be overriden in subclass to implement the actual setter code
raise NotImplementedError
class B(A):
@property
def mode(self):
return self._mode
def _set_mode(self, value):
self._mode = value
obj = B()
obj.mode = 'test'
这引出了一个问题。
obj.mode = 'test'
AttributeError: can't set attribute
似乎我需要在B中注册一个setter。通常我会这样做:@A.mode.setter,但是这里不适用,因为我实际上并不想在B中定义一个新的setter,而只是重用A中的setter。有人能提供一些解决方法吗?可能很简单,但我现在没有看到:/
return self._mode_getter()
,然后重写_mode_getter()。这应该可以工作,但会添加一个可能不需要的方法。 - Emanuel Ey