上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明。

一、    案例说明

本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只定义了长度属性的操作。包括三个完整的装饰器,如果大家想试一下少一个操作方法的装饰器,可以直接把对应装饰器去除即可。

二、    案例代码

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 #删除长方形的长

从下面的执行截图可看出,相关操作都是调用对应的方法执行,只是方法的名字必须是固定的属性名。

三、    案例截图

 

四、    异常情况的代码和截图

与《第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?》一样,老猿也测试了属性名相同时的异常情况,证实该异常情况与7.25节介绍的异常情况完全一样。相关代码和执行的部分截图如下:

#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装饰器的使用,并举例说明装饰器定义的属性不能和类的实例变量同名,否则可能会引发异常。截止到本节,类和类型的基础知识讲了大部分,还有部分后面再开单独章节介绍,本章到此结束。

老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

欢迎大家批评指正,谢谢大家关注!

第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter的更多相关文章

  1. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  2. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  3. 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?

    第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一.    案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...

  4. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  5. 第8.22节 Python案例详解:重写 “富比较”方法控制比较逻辑

    一. 案例说明 本节定义一个小汽车的类Car,类中包括车名carname.百公里油耗oilcostper100km.价格price三个属性.然后实现__lt__.__gt__.__le__.__ge_ ...

  6. 第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析

    一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...

  7. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  8. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

  9. 第7.13节 案例详解:Python类变量

    第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一.    定义函数dirp def dirp(iter): ret ...

随机推荐

  1. Java_进程与线程

    进Process&Thread 区别 进程 线程 根本区别 作为资源分配的单位 调度和执行的单位 开销 每个进程都有独立的代码和数据空间(进程上下文), 进程间的切换会有较大的开销 线程可以看 ...

  2. 手写cli

    惠善一的博客:http://huishanyi.club/ 通过命令行工具,初始化团队项目,并生成团队规范代码,一键创建项目,一键生成代码,一键生成功能模块··· 解放双手,从 cli 开始, JSe ...

  3. sdsd

    自本人拥有手机以来,由于有存短信的特殊嗜好,得出以下不完全统计: 累计中奖93次,资金共计2260万元(人民币),另有各种iphone68部, 电脑36台,轿车27辆,收到法院传票93张,被大学录取5 ...

  4. 三分钟快速解析GraphQL基本工作思路!

    欢迎阅读 本文会通过实际场景介绍一下 GraphQL,目的是让你快速了解 GraphQL 是什么,以及基本工作思路,不包含实际用法,所以阅读很轻松. 一.GraphQL 是什么? GraphQL 是后 ...

  5. js常用的遍历方法以及flter,map方法

    1.首先明确vue主要操作数据.他并不提倡操作dom. 数组的变异:能改变原数组. *** 先来复习下便利==遍历一个数组的四种方法: <script> let arr = [1, 2, ...

  6. 使用配置文件方式记录Python程序日志

    开发者可以通过三种方式配置日志记录: 调用配置方法的Python代码显式创建记录器.处理程序和格式化程序. 创建日志配置文件并使用fileConfig() 函数读取. 创建配置信息字典并将其传递给di ...

  7. XCTF-crypto---转轮机加密

    转轮密码机是由一个输入键盘和一组转轮组成的,每个转轮上标有26个字母,字母的顺序随意,转轮之间由齿轮进行连接,当一个转轮转动时,可以讲一个字母转化为另一个字母. 工作原理: 转轮机由多个转轮构成,每个 ...

  8. 极客mysql01

    1.MySQL的框架有几个组件, 各是什么作用?连接器:负责跟客户端建立连接.获取权限.维持和管理连接.查询缓存:查询请求先访问缓存(key 是查询的语句,value 是查询的结果).命中直接返回.不 ...

  9. JAVA程序员工作常用英语(细心整理)

    基础----进阶 A. array数组accessible 可存取的 area面积audio 音频 addition 加法 action 行动 arithmetic 算法adjustment 调整 a ...

  10. 对accuracy、precision、recall、F1-score、ROC-AUC、PRC-AUC的一些理解

    最近做了一些分类模型,所以打算对分类模型常用的评价指标做一些记录,说一下自己的理解.使用何种评价指标,完全取决于应用场景及数据分析人员关注点,不同评价指标之间并没有优劣之分,只是各指标侧重反映的信息不 ...