在尝试在子类中设置属性时,我想提出一个NotImplementedError
。这是代码:
class Parent():
def __init__(self):
self._attribute = 1
@property
def attribute(self):
return self._attribute
@attribute.setter
def attribute(self, value):
self._attribute = value
class Child(Parent):
@Parent.attribute.setter
def attribute(self, value):
raise NotImplementedError('Not implemented.')
是否有一种方法可以使用Child
重新实现super()
的属性设置器,而不是直接引用Parent
?
答案 0 :(得分:2)
您不能直接在super()
语句块的顶层使用class
,因为此时class
尚不存在。
快速简单的解决方案是使您的Parent
属性设置器委托给另一种方法,即:
class Parent():
def __init__(self):
# note that you can use the property here,
# no need to break encapsulation.
self.attribute = 1
@property
def attribute(self):
return self._attribute
@attribute.setter
def attribute(self, value):
self._set(value)
def _set(self, value):
self._attribute = value
然后,您只需在子类中覆盖_set(self)
,就象其他任何普通方法一样:
class Child(Parent):
def _set(self, value):
raise NotImplementedError