上节详细介绍了利用@property装饰器定义属性的语法,本节经过具体案例来进一步说明。
1、 案例说明
本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其余方法都只定义了长度属性的操做。包括三个完整的装饰器,若是你们想试一下少一个操做方法的装饰器,能够直接把对应装饰器去除便可。ide
2、 案例代码
1. 定义类Rectangle函数
class Rectangle(): def __init__(self,length,width): self.width,self.length = width,length @property #定义getter装饰器 def len(self): print("execute getLen") return self.length @len.setter #定义setter装饰器 def len(self,length): print("execute setLen") self.length=length @len.deleter #定义deleter 装饰器 def len(self):self.length=0
2. 定义实例对象并执行相关操做(交互模式下执行)测试
rect = Rectangle(5,3) rect.len #获取长方形的长 rect.len=10 #设置长方形的长 rect.len #获取长方形的长 del rect.len #删除长方形的长
从下面的执行截图可看出,相关操做都是调用对应的方法执行,只是方法的名字必须是固定的属性名。
3、 案例截图
4、 异常状况的代码和截图
与《第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?》同样,老猿也测试了属性名相同时的异常状况,证明该异常状况与7.25节介绍的异常状况彻底同样。相关代码和执行的部分截图以下:code
#property装饰器设置与类变量的同名属性 class Rectangle(): def __init__(self,length,width): self.width,self.length = width,length @property def length(self): print("execute getLen") return self.length @length.setter def length(self,length): print("execute setLen") self.length=length @length.deleter def length(self):self.length=0 rect = Rectangle(5,3)
执行截图:对象
经过以上代码的执行在此验证了属性名不能与实例变量同名,除非是使用一个自己没有任何数据操做的实例变量。
本节老猿结合案例详细介绍了property装饰器的使用,并举例说明装饰器定义的属性不能和类的实例变量同名,不然可能会引起异常。截止到本节,类和类型的基础知识讲了大部分,还有部分后面再开单独章节介绍,本章到此结束。
blog