@propertyPython内置的@property装饰器就是负责把一个方法变成属性调用的: class Screen(object): def isint(self,px): if not isinstance(px,int): raise ValueError('px must be an int') if px<0 : raise ValueError('px must be not a negative number') @property def width(self): return self._width @width.setter def width(self,value): self.isint(value) self._width=value @property def height(self): return self._height @height.setter def height(self,value): self.isint(value) self._height=value @property def resolution(self): return self._width * self._height @property给一个Screen对象加上width和height属性,以及一个只读属性resolution: >>> s=Screen()>>> s.width=666>>> s.height=888>>> print(s.resolution)591408>>> print('s.width * s.height =%d? ' % s.resolution)s.width * s.height =591408? >>> print('s.width * s.height =%d ' % s.resolution)s.width * s.height =591408 >>>
#题目: 请利用@property 给一个 Screen 对象加上 width 和 height 属性,以及一个只#读属性 resolution。 #示例: class Screen(): pass #test: s=Screen() s.width=1024 s.height=768 print(s.resolution) 786432答案:class Screen(object) : @property def width(self) : return self._width @width.setter def width(self,valuer) : if not isinstance(valuer,int): raise ValueError('score must be an integer') if valuer < 0 : raise ValueError('score must over zero') self._width=valuer @property def height(self) : return self._height @height.setter def height(self,number) : if not isinstance(number,int) : raise ValueError('score must be an integer') if number < 0 : raise ValueError('score must be an zero') self._height = number @property def resolution(self): return self._width * self._heights=Screen()s.width = 1024s.height = 768print(s.resolution) 123456789101112131415161718192021222324252627282930313233解析: 其实这个答案整体很好理解的,思路也很清晰 , 结构也并不复杂,但是需要细心 , 我一开始就因为没细心所以造成了细节上的不必要的错误。 这段代码比较复杂的地方是第4行和16行,其实把return self._width1换成return self.kuandu1也可以,self.(可以命名成你想定义的名字),但是不能在原来代码的基础上直接去掉下划线,这样运行结果会进入死循环。同时建议自定义命名的话最好加上下划线,至于为什么这样做,我还需要再思考一下原理,最近休息不好脑袋萌萌的。如果想通了 ,我会更新出来的。如果对代码有其他不清楚的地方可以留下评论,我会尽量经常上来查看一下。