鱼C论坛

 找回密码
 立即注册
查看: 1331|回复: 3

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

[复制链接]
发表于 2021-12-24 14:59:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-24 17:01:36 | 显示全部楼层
是不是因为你的第二段代码的定义的方法叫score,然后你return的属性self.score其实在调用的时候也叫score,和你的方法重名了,在后面的s.score,它不能判断到底是你调用这个方法,然后错误地将其设为60,还是你返回的是score方法里的score这一个量,第一段代码其实跟_没关系,无论那个是什么字符都行,只要不跟方法重名就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-25 09:04:19 | 显示全部楼层
就是陷入死循环了。第一return换个名字就好了 不一定非要是score
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表