在尝试在子类中设置属性时,我想提出一个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
我看到我可以定义一个Child
,它可以通过执行以下任一操作直接覆盖Parent
的属性设置器:
class ChildA(Parent):
@Parent.attribute.setter
def attribute(self, value):
raise NotImplementedError('Not implemented.')
class ChildB(Parent):
@property
def attribute(self):
return self._attribute
@attribute.setter
def attribute(self, value):
raise NotImplementedError('Not implemented.')
以上两者之间是否有区别?
答案 0 :(得分:1)
这两种解决方案之间没有区别。
实际上,@property.getter
,@property.setter
和@property.deleter
装饰器是经过精心设计的,并牢记了这个确切的用例。来自the docs:
属性对象具有
getter
,setter
和deleter
方法,可用作 装饰器创建属性的副本,并带有相应的 访问器功能设置为修饰功能。
(强调我的。)
因此,不可以,使用@Parent.attribute.setter
不会影响Parent
类的行为。
总体而言,最好使用@Parent.attribute.setter
解决方案,因为它可以减少代码重复-将父类的getter复制粘贴到子类中只是潜在的错误来源。
相关问题: