第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
2023-09-27 14:26:59 时间
上节详细介绍了利用@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的世界。
欢迎大家批评指正,谢谢大家关注!
相关文章
- 6 小时 Python 入门
- 跟我学Python图像处理丨图像分类原理与案例
- 【Python 百练成钢】使用Python实现密码登录器
- python机器学习数据建模与分析——决策树详解及可视化案例
- Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS
- 基于Python的课程案例研究系统的设计和实现
- python:re常用的方法以及结合request综合案例
- Python学习笔记(2):数据库访问
- Python中的正则表达式
- 在CentOS下利用Python+selenium获取腾讯首页的今日话题。
- python入门之后须掌握的知识点(模块化编程、时间模块)【一】
- Python Class 02-数字类型
- 代码分享丨使用python和matplotlib来对比两幅图像
- Python:Scrapy的安装和入门案例
- python核心编程学习记录之Python对象
- python基础 -- 算数操作符
- 为什么Python中sort方法和sorted函数调用废弃使用cmp参数
- 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?
- 第7.9节 案例详解:Python类封装
- 第7.7节 案例详解:Python类继承机制
- 用python解决养兔子趣味问题
- python logging一个通用的使用模板
- Python pandas.read_sql_query()常用操作方法代码
- python点云可视化
- Python小白爬虫(一) _使用requests模块进行Get请求网页得到页面内容(案例)
- Python小白爬虫(二) _使用正则表达式获取页面中我们想要的数据(案例)
- Python简单计算案例
- Python案例:使用BeautifuSoup4的爬虫
- 三十七、python学习之Redis数据库