鹿酸梅 发表于 2021-12-24 14:59:04

关于代码运行的疑惑,请大神帮忙解答一下。为什么第一段代码可以正常运行,第二段不行

class Student(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

s=Student()
s.score=60
s.score


class Student(object):
    @property
    def score(self):
      return self.score                                                           //这里socre前面没有 _

    @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                                                                //这里也没有_

s=Student()
s.score=60
s.score

鱼丸真好吃 发表于 2021-12-24 17:01:36

是不是因为你的第二段代码的定义的方法叫score,然后你return的属性self.score其实在调用的时候也叫score,和你的方法重名了,在后面的s.score,它不能判断到底是你调用这个方法,然后错误地将其设为60,还是你返回的是score方法里的score这一个量,第一段代码其实跟_没关系,无论那个是什么字符都行,只要不跟方法重名就行

代码小白liu 发表于 2021-12-25 09:04:19

就是陷入死循环了。第一return换个名字就好了 不一定非要是score

鹿酸梅 发表于 2021-12-25 09:48:59

鱼丸真好吃 发表于 2021-12-24 17:01
是不是因为你的第二段代码的定义的方法叫score,然后你return的属性self.score其实在调用的时候也叫score, ...

谢谢!
页: [1]
查看完整版本: 关于代码运行的疑惑,请大神帮忙解答一下。为什么第一段代码可以正常运行,第二段不行