Discuss / Python / 使用@property之后的score和_score变得一样了吗

使用@property之后的score和_score变得一样了吗

Topic source

VicAceYoung

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

如老师所讲,@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嘛? 新人求老师或大神解答

  1. 如果在未设置width值时(如:s.width = 1024)访问s._width_width属性就会报错,提示该对象s没有_width这个属性。理由是:只有对s.width进行赋值后才会调用setter方法对_width进行“隐式”赋值。self._width动态设置属性值后,当前对象便有了_width属性。(这个理解了就通了、滑稽)
  2. 返回的self._score中的_score是什么呢 是当前设置score属性时,当前对象被动态添加的属性,属性名为_score
  3. 比如下面写s.width = 1024和写s._width都一样,resolution里写self.height self.width和写self._height self._width也都可以。 这个当然,但是有个前提是,s的widthheight属性均已被赋值。不然会出现什么结果?(当然会提示 _width 或者 _height属性不存在啦)
  4. Student类中不应该只有width没有_width。 当然也可以没有_width属性啦。但是我们设置width的值时需要有一个“东西”来保存设置的值,当get width属性才能进行返回嘛。

以上言论纯属个人脑补“瞎吹”,如有错误之处,还请委婉指出、斜眼笑

Y_JunKang

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

楼主的问题解决了?我也有这个疑问,为什么使用了@property之后就必须要在变量前面加下划线了

不是说必须要在前面加_。而是因为你在类中定义的方法名跟你的变量名重复了。return就返回的是方法本身。为了区别变量与方法,所以会在变量前加下划线,是为了区别。如果你换成别的,同样成立。


  • 1

Reply