@property
Python内置的@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._height s=Screen()
s.width = 1024
s.height = 768
print(s.resolution)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
解析:
其实这个答案整体很好理解的,思路也很清晰 , 结构也并不复杂,但是需要细心 , 我一开始就因为没细心所以造成了细节上的不必要的错误。
这段代码比较复杂的地方是第4行和16行,其实把 return self._width
1
换成 return self.kuandu
1
也可以,self.(可以命名成你想定义的名字),但是不能在原来代码的基础上直接去掉下划线,这样运行结果会进入死循环。同时建议自定义命名的话最好加上下划线,至于为什么这样做,我还需要再思考一下原理,最近休息不好脑袋萌萌的。如果想通了 ,我会更新出来的。如果对代码有其他不清楚的地方可以留下评论,我会尽量经常上来查看一下。
05-07 15:17
查看更多