上节详细介绍了利用@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的世界。

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

python装饰器setter_第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. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

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

  4. python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...

    老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的行数.列数.当前项.当前行.当前列等属性访问方法. 1.行数rowCount QTableWidge ...

  5. python名片管理器实验步骤_Python综合应用名片管理系统案例详解

    本文实例讲述了python综合应用名片管理系统.分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎 ...

  6. python爬虫代码实例源码_python爬虫及案例详解(附代码)

    安装三大库 1.requests 2.BeautifulSoup 3.lxml 有的网站做了相应的反爬虫,不能用普通方法爬取网站数据. 这里我用python爬取了几个网站的数据,分别存入csv文件,m ...

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

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

  8. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  9. python代码案例详解-第7.20节 案例详解:Python抽象类之真实子类

    第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义了图形 ...

最新文章

  1. python爬取公众号推荐_python爬搜狗微信获取指定微信公众号的文章
  2. HBase原理解析(转)
  3. LtScrollImageView:自动滚动的广告图片展示栏
  4. listen()和accept()函数:让套接字进入监听状态并响应客户端请求
  5. 百度全面开放HTTPS之我见
  6. web性能測試工具-沒還有實驗-URL收集_无需整理
  7. 安装配置opensips过程记录
  8. 1900页Python系列PPT分享七:文件操作(132页)
  9. 软件测试—软件测试基础知识—(三)软件测试的原则和(四)软件测试策略
  10. es中的search_type简单理解
  11. 手机上最好用的五笔输入法_聊聊手机最好用的几个功能
  12. 信息安全-移动应用安全需求分析与安全保护工程
  13. PyQt5 UI设计时自动创建qrc文件
  14. 磁传感器AKM8975驱动和中间层
  15. iOS 13 SceneDelegate适配
  16. 力扣707设计链表(单链表,JavaScript)
  17. vivo android8公测,vivo安卓9.0公测招募开启:明年年初获得推送
  18. python修改允许京东下单_京东Python开发(二)
  19. 熊梓淇 《国民老公2》看到乔安好扮演者,迫不及待想追了
  20. 【白板推导系列笔记】降维-主成分分析-概率角度(Probabilistic PCA)

热门文章

  1. 阿里云容器服务cni网络插件terway非官方网络性能测试
  2. Picasso-源码解析(二)
  3. Kafka消费者APi
  4. Airbnb: React Native 从选择到放弃
  5. STL模板整理 set
  6. HTTP RTSP RTMP RTP 协议简说 流媒体学习(一)
  7. 运维利器:万能的 strace
  8. NetTier模板生成的代码框架用法 (转)
  9. Websphere的类加载器以及策略的简单介绍
  10. html5 swiper 菜鸟,前端插件swiper使用新手教程