子类覆盖父类property ,super(Child, Child).var.__set__() 的问题

tpzstamp 2019-03-21 02:52:38
为什么在SubPerson的name.setter里面,不能用super().name = value?或者super(SubPerson,SubPerson).name = value.


class Person:
def __init__(self, name):
self.name = name

# Getter function
@property
def name(self):
return self._name

# Setter function
@name.setter
def name(self, value):
if not isinstance(value, str):
raise TypeError('Expected a string')
self._name = value

class SubPerson(Person):
@property
def name(self):
print('Getting name')
return super().name # Why super().name works here?

@name.setter
def name(self, value):
print('Setting name to', value)
super(SubPerson, SubPerson).name.__set__(self, value)
#super().name = value ... This statement gets error
#super(SubPerson, SubPerson).name = value ...Get Error
...全文
52 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruancan 2019-03-21
  • 打赏
  • 举报
回复
你这个代码的排版有问题 1.super不支持直接使用setter,只支持getter 2.super仅支持使用__set__()来使用setter

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧