Discuss / Python / 求助

求助

Topic source

大冰小松

#1 Created at ... [Delete] [Delete and Lock User]
# 使用property
class Person(object):
    @property
    def score(self):
        return self.score

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer')
        if value < 0 or value > 100:
            raise ValueError('score must between 0~100')
        self.score = value

p1 = Person()
p1.score = 78
print(p1.score)

报错:

 File "D:/workspace/PythonWS/python_study/use_property.py", line 37, in score
    self.score = value
RecursionError: maximum recursion depth exceeded

把self.score改成self._score就可以了,为什么?劳烦各位大神解释一下。

大冰小松

#2 Created at ... [Delete] [Delete and Lock User]

下面的评论说是由于方法名与属性名相同导致的,感觉是这样的,不过谁能解释一下这个递归过程?完全不明白。

大冰小松

#3 Created at ... [Delete] [Delete and Lock User]

debug了一下搞清楚了,self.name就是p1.name,也就是说在方法中还是把self.name=value解释set方法,导致重复调用自身

tytttta

#4 Created at ... [Delete] [Delete and Lock User]

原来如此,明白了 不过怎么debug

冯郭飞

#5 Created at ... [Delete] [Delete and Lock User]

下载一个编辑器我的是PyCharm,就可以debug了,可以很直观看到调用过程

还是不太明白是怎么搞的??

方法名和属性名不能相同原来!!


  • 1

Reply