python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...
上节详细介绍了利用@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...相关推荐
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析
Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...
- Python使用property函数定义属性访问方法如果不定义fget会怎么样?
我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...
- python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...
老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的行数.列数.当前项.当前行.当前列等属性访问方法. 1.行数rowCount QTableWidge ...
- python名片管理器实验步骤_Python综合应用名片管理系统案例详解
本文实例讲述了python综合应用名片管理系统.分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎 ...
- python爬虫代码实例源码_python爬虫及案例详解(附代码)
安装三大库 1.requests 2.BeautifulSoup 3.lxml 有的网站做了相应的反爬虫,不能用普通方法爬取网站数据. 这里我用python爬取了几个网站的数据,分别存入csv文件,m ...
- 第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析
一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...
- python中的json函数_python中装饰器、内置函数、json的详解
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- python代码案例详解-第7.20节 案例详解:Python抽象类之真实子类
第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义了图形 ...
最新文章
- python爬取公众号推荐_python爬搜狗微信获取指定微信公众号的文章
- HBase原理解析(转)
- LtScrollImageView:自动滚动的广告图片展示栏
- listen()和accept()函数:让套接字进入监听状态并响应客户端请求
- 百度全面开放HTTPS之我见
- web性能測試工具-沒還有實驗-URL收集_无需整理
- 安装配置opensips过程记录
- 1900页Python系列PPT分享七:文件操作(132页)
- 软件测试—软件测试基础知识—(三)软件测试的原则和(四)软件测试策略
- es中的search_type简单理解
- 手机上最好用的五笔输入法_聊聊手机最好用的几个功能
- 信息安全-移动应用安全需求分析与安全保护工程
- PyQt5 UI设计时自动创建qrc文件
- 磁传感器AKM8975驱动和中间层
- iOS 13 SceneDelegate适配
- 力扣707设计链表(单链表,JavaScript)
- vivo android8公测,vivo安卓9.0公测招募开启:明年年初获得推送
- python修改允许京东下单_京东Python开发(二)
- 熊梓淇 《国民老公2》看到乔安好扮演者,迫不及待想追了
- 【白板推导系列笔记】降维-主成分分析-概率角度(Probabilistic PCA)