python - 程序运行会出现错误
问题描述
class Person(object): def __init__(self,name):self.name = nameclass Teacher(Person): def __init__(self,score):self.__score = scoreclass Student(Teacher,Person): def __init__(self,name,score):Person.__init__(self,name)super(Student,self).__init__(score) @property def score(self):return self.__score @score.setter def score(self,score):if score<0 or score >100: raise ValueError(’invalid score’)self.__score = score def __str__(self):return ’Student:%s,%d’ %(self.name,self.score)s1 = Student(’Jack’,89)s1.score = 95print s1
在运行这个程序时,只有当score是私有变量的时候才能正常运行,是property的某些特性吗,还是什么?如果只设置为self.score = score,就会出现‘maximum recursion depth exceeded while calling a Python object’的错误,求大神解答
问题解答
回答1:会产生这个困惑的原因是对python的getter装饰器和setter装饰器不够熟悉
当你声明了对score属性的setter装饰器之后, 实际上对这个score进行赋值就是调用这个setter装饰器绑定的方法
所以你的setter要访问的成员变量不能和setter方法同名, 不然就相当于一个无尽的迭代:
self.score(self.score(self.score(self.score(self.score........ 无尽的迭代,
当然会报超过最大迭代深度的错误了
相关文章:
1. win下面的cmder中的vim . 中文乱码. 试了百度上的各种解决方式.. 还是没弄好2. 想学下微信支付视频教程,能否付费获得?3. javascript - 网易云音乐是如何实现a标签href有值不跳转的?4. html5 - 请求到了网易云歌曲到在线地址,如何在web页面中播放?5. css3 - 淘宝网上这种抵抗反弹的效果如何做?6. javascript - 类似于天猫和京东,商品详情页上拉查看图文详情,是通过什么方式实现的?7. python - Flask云部署,gunicorn运行成功,但是通过外网端口无法访问8. nginx - WordPress绑定了域名后主页依然显示ip,以及WordPress目录问题9. javascript - 微信小程序限制加载个数10. html5 - 自己的H5页面如何集成支付宝支付
