搜索
python - 程序运行会出现错误
过去多啦不再A梦
过去多啦不再A梦 2017-06-22 11:52:35
[Python讨论组]
class Person(object):
    def __init__(self,name):
        self.name = name
class Teacher(Person):
    def __init__(self,score):
        self.__score = score
class 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 = 95
print s1

在运行这个程序时,只有当score是私有变量的时候才能正常运行,是property的某些特性吗,还是什么?如果只设置为self.score = score,就会出现‘maximum recursion depth exceeded while calling a Python object’的错误,求大神解答

过去多啦不再A梦
过去多啦不再A梦

全部回复(1)
PHP中文网

会产生这个困惑的原因是对python的getter装饰器和setter装饰器不够熟悉

当你声明了对score属性的setter装饰器之后, 实际上对这个score进行赋值就是调用这个setter装饰器绑定的方法

所以你的setter要访问的成员变量不能和setter方法同名, 不然就相当于一个无尽的迭代:

self.score(self.score(self.score(self.score(self.score........ 无尽的迭代,

当然会报超过最大迭代深度的错误了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号