关于代码运行的疑惑,请大神帮忙解答一下。为什么第一段代码可以正常运行,第二段不行
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
是不是因为你的第二段代码的定义的方法叫score,然后你return的属性self.score其实在调用的时候也叫score,和你的方法重名了,在后面的s.score,它不能判断到底是你调用这个方法,然后错误地将其设为60,还是你返回的是score方法里的score这一个量,第一段代码其实跟_没关系,无论那个是什么字符都行,只要不跟方法重名就行 就是陷入死循环了。第一return换个名字就好了 不一定非要是score 鱼丸真好吃 发表于 2021-12-24 17:01
是不是因为你的第二段代码的定义的方法叫score,然后你return的属性self.score其实在调用的时候也叫score, ...
谢谢!
页:
[1]