Python overriding getter without setter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class human(object): def __init__(self, name=''): self.name = name @property def name(self): return self._name @name.setter def name(self, value): self._name = value class superhuman(human): @property def name(self): return 'super ' + name s = superhuman('john') print s.name # Doesn't work :("AttributeError: can't set attribute" s.name = 'jack' print s.name |
我希望能够重写该属性,但能够使用父级的setter,而不必重写子类中的setter。
那是不是可能的?
仅使用原房地产的
1 2 3 4 | class superhuman(human): @human.name.getter def name(self): return 'super ' + self._name |
请注意,必须使用全名才能访问父类上的原始属性描述符。
论证:
1 2 3 4 5 6 7 8 9 10 11 | >>> class superhuman(human): ... @human.name.getter ... def name(self): ... return 'super ' + self._name ... >>> s = superhuman('john') >>> print s.name super john >>> s.name = 'jack' >>> print s.name super jack |
所以在你的
在子类中,您只需使用这个技巧创建一个新的描述符副本,只需替换getter。