property装饰器和raise错误

在此,记录下今天所遇到的这个知识点,纵然,并非首次遇到,久而久之,自然就忘了.于是,记录下来吧!

@property

1
2
3
4
5
6
7
8
9
10
class test():

@property
def age(self):
raise AttributeError('不可读取的属性') # raise exceptions中的错误类型
raise Exception

@age.setter
def age(self, value):
self._age = value
1
t = test()
1
t.age = 10
1
t.age
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-35-2184f91d87a7> in <module>()
----> 1 t.age


<ipython-input-32-cf1187a5ec7a> in age(self)
      3     @property
      4     def age(self):
----> 5         raise AttributeError('不可读取的属性')
      6 
      7     @age.setter


AttributeError: 不可读取的属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class test():
def __init__(self, age):
self._age = age

@property
def age(self):
return self._age

@age.setter
def age(self, value):
if int(value) > 20:
raise AttributeError('Age > 20!')
else:
self._age = value
1
t1 = test(18)
1
t1.age
18
1
t1.age = 20
1
t1.age
20
1
t1.age = 21

`python

---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-48-f9bc59011b1e> in <module>()
----> 1 t1.age = 21


<ipython-input-43-f3f0984aa4cd> in age(self, value)
     10     def age(self, value):
     11         if int(value) > 20:
---> 12             raise AttributeError('Age > 20!')
     13         else:
     14             self._age = value


AttributeError: Age > 20!

‘’’

通过这个内置的装饰器写法,可以把类的属性跟方法联系起来,设置一些只能设置,不能读取的值.通过函数去设置和读取值.更加灵活,可以在设置或者读取里添加逻辑代码.

raise错误

用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。

异常说明,越详细越好.

Python中也可以自定义自己的特殊类型的异常类,继承这两个类即可.