使用@property之后的score和_score变得一样了吗
Topic source- 如果在未设置
width
值时(如:s.width = 1024
)访问s._width
即_width
属性就会报错,提示该对象s没有_width
这个属性。理由是:只有对s.width
进行赋值后才会调用setter
方法对_width
进行“隐式”赋值。self._width
动态设置属性值后,当前对象便有了_width
属性。(这个理解了就通了、滑稽) - 返回的self._score中的_score是什么呢 是当前设置
score
属性时,当前对象被动态添加的属性,属性名为_score
。 - 比如下面写s.width = 1024和写s._width都一样,resolution里写self.height self.width和写self._height self._width也都可以。 这个当然,但是有个前提是,s的
width
和height
属性均已被赋值。不然会出现什么结果?(当然会提示_width
或者_height
属性不存在啦) - Student类中不应该只有width没有_width。 当然也可以没有
_width
属性啦。但是我们设置width
的值时需要有一个“东西”来保存设置的值,当getwidth
属性才能进行返回嘛。
以上言论纯属个人脑补“瞎吹”,如有错误之处,还请委婉指出、斜眼笑
不是说必须要在前面加_。而是因为你在类中定义的方法名跟你的变量名重复了。return就返回的是方法本身。为了区别变量与方法,所以会在变量前加下划线,是为了区别。如果你换成别的,同样成立。
- 1
VicAceYoung
如老师所讲,@property使得score从方法变成了属性,即Student类中有了score这个属性,那么 def score(self): return self._score 中返回的self._score中的_score是什么呢,Student类中应该只有score而并没有_score这个attribute呀。 另外,在作业中,我和楼上几位同学的代码一样,然后我发现在声明完class之后的引用和计算中,调用_width和调用width完全一样了,比如下面写s.width = 1024和写s._width都一样,resolution里写self.height self.width和写self._height self._width也都可以。这是为什么呢?Student类中不应该只有width没有_width嘛? 新人求老师或大神解答