python中property详解
文章目录
- 1. 什么是property属性
- 2. Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回。
- 3. property属性的有两种方式
- 3.1 在类的实例方法上应用@property装饰器
- 3.2 类属性方式,创建值为property对象的类属性
1. 什么是property属性
一种用起来像是使用的实例属性一样的特殊属性,
可以对应于某个方法,希望能够像调用属性一样来调用方法 此时可以将一个方法加上property
将该函数方法,当做属性,不用()也可以执行
# ############### 定义 ###############
class Foo:def func(self):pass# 定义property属性@propertydef prop(self):pass# ############### 调用 ###############
foo_obj = Foo()
foo_obj.func() # 调用实例方法
foo_obj.prop # 调用property属性property属性的定义和调用要注意一下几点:
定义时,在实例方法的基础上添加 @property 装饰器;
并且仅有一个self参数调用时,无需括号
2. Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回。
3. property属性的有两种方式
- 装饰器 即:在方法上应用装饰器
- 类属性 即:在类中定义值为property对象的类属性
3.1 在类的实例方法上应用@property装饰器
Python中的类有经典类和新式类,新式类的属性比经典类的属性丰富。(如果类继object,那么该类是新式类)
经典类,具有一种@property装饰器
# ############### 定义 ###############
class Goods:@propertydef price(self):return "laowang"
# ############### 调用 ###############
obj = Goods()
result = obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
print(result)
新式类,具有三种@property装饰器
#coding=utf-8
# ############### 定义 ###############
class Goods:"""python3中默认继承object类以python2、3执行此程序的结果不同,因为只有在python3中才有@xxx.setter @xxx.deleter"""@propertydef price(self):print('@property')@price.setterdef price(self, value):print('@price.setter')@price.deleterdef price(self):print('@price.deleter')# ############### 调用 ###############
obj = Goods()
obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price = 123 # 自动执行 @price.setter 修饰的 price 方法,并将 123 赋值给方法的参数
del obj.price # 自动执行 @price.deleter 修饰的 price 方法
注意
- 经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法
- 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法
由于新式类中具有三种访问方式,我们可以根据它们几个属性的访问特点,
分别将三个方法定义为对同一个属性:获取、修改、删除
eg:propert 的实际应用和作用
class Goods(object):def __init__(self):# 原价self.original_price = 100# 折扣self.discount = 0.8@propertydef price(self):# 实际价格 = 原价 * 折扣new_price = self.original_price * self.discountreturn new_price@price.setterdef price(self, value):self.original_price = value@price.deleterdef price(self):del self.original_priceobj = Goods()
obj.price # 获取商品价格
obj.price = 200 # 修改商品原价
del obj.price # 删除商品原价
3.2 类属性方式,创建值为property对象的类属性
当使用类属性的方式创建property属性时,经典类和新式类无区别
class Foo:def get_bar(self):return 'laowang'BAR = property(get_bar)obj = Foo()
reuslt = obj.BAR # 自动调用get_bar方法,并获取方法的返回值
print(reuslt)
property方法中有个四个参数
- 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
- 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
- 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
- 第四个参数是字符串,调用 对象.属性.doc ,此参数是该属性的描述信息
#coding=utf-8
class Foo(object):def get_bar(self):print("getter...")return 'laowang'def set_bar(self, value): """必须两个参数"""print("setter...")return 'set value' + valuedef del_bar(self):print("deleter...")return 'laowang'BAR = property(get_bar, set_bar, del_bar, "description...")obj = Foo()obj.BAR # 自动调用第一个参数中定义的方法:get_bar
obj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
desc = Foo.BAR.__doc__ # 自动获取第四个参数中设置的值:description...
print(desc)
del obj.BAR # 自动调用第三个参数中定义的方法:del_bar方法
由于类属性方式创建property属性具有3种访问方式,
我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
eg:
class Goods(object):def __init__(self):# 原价self.original_price = 100# 折扣self.discount = 0.8def get_price(self):# 实际价格 = 原价 * 折扣new_price = self.original_price * self.discountreturn new_pricedef set_price(self, value):self.original_price = valuedef del_price(self):del self.original_pricePRICE = property(get_price, set_price, del_price, '价格属性描述...')obj = Goods()
obj.PRICE # 获取商品价格
obj.PRICE = 200 # 修改商品原价
del obj.PRICE # 删除商品原价
综上所述:
- 定义property属性共有两种方式,分别是【装饰器】和【类属性】,而【装饰器】方式针对经典类和新式类又有所不同。
- 通过使用property属性,能够简化调用者在获取数据的流程
python中property详解相关推荐
- python中getattr详解
python中getattr详解 目录 getattr详解 前言 一.消除if-else 二. 反射机制 三.getattr 详解 总结 getattr详解 前言 这两天在优化腾讯云迁移平台(Smar ...
- Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)
文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...
- python中configparser详解_Python中的ConfigParser模块使用详解
1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该sect ...
- python中getattr详解_Python类中方法getitem和getattr详解
请分享高手帮小编详解一下Python中的getattr内置函数没明白这个内置函数得意思.麻烦帮小编讲解一下. 其实这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以 ...
- python中闭包详解
在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...
- Python中dict详解
python3.0以上,print函数应为print(),不存在dict.iteritems()这个函数. 在python中写中文注释会报错,这时只要在头部加上# coding=gbk即可 #字典的添 ...
- python中getattr详解_Python中如何使用getattr()函数
Python中如何使用getattr()函数 发布时间:2020-08-12 14:57:55 来源:亿速云 阅读:74 作者:小新 这篇文章将为大家详细讲解有关Python中如何使用getattr( ...
- python中ttk详解_Python 中的Property 动态属性和特性详解
在Python开发时,考虑到安全性,我们会通过使用 '__' 定义私有属性,以限制类外或者子类都不能直接进行访问.操作.但同时,这些私有属性并不是一成不变的,所以我们还需要提供私有属性的对外操作方式. ...
- python 中cookie_详解Python中的Cookie模块使用
最近在用GAE开发自己的博客程序.虽然GAE的API没有显式的提供操作Cookie的方法,但他现有的架构,使我们有足够的自由来操作Cookie. Cookie 模块,顾名思义,就是用来操作Cookie ...
- python中configparser详解_python ConfigParser模块详解
功能介绍 在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单 ...
最新文章
- angular2集成highchart
- 讲解Linux服务器被黑解决方法
- Pollard_rho算法+Miller_Rabin算法(大素数的判断与素因子分解)(模板)
- 通讯模块板载天线设计方法
- ReactNative开发环境
- python-opencv图像处理之车牌识别+区域划分+车牌提取+保存图片(2)
- Unity Mask制作圆形头像
- Java语言,基于TCP编写一个简单的Client/Server 网络应用程序。
- 计算机二级考试题库 操作题,2016计算机二级考试题库:《C++》基本操作题练习...
- python-while-函数
- 阿里云企业邮箱2019
- 在页面添加天气预报显示
- 失传万年的PS合成进阶宝典(一)
- ts-学习类型-class
- 删除数字求最小值(贪心)
- (C#).NET调用新浪微博转发
- javascript的原型,原型链,内置对象 拖曳对话框 放大镜显示和隐藏遮挡层及大层
- idea项目中没有.iml文件
- Spring Boot自定义注解+AOP实现日志记录
- 【scala安装Windows】
热门文章
- 仿山楂岛留言源码/公众号吸粉/短视频引流神器
- 普度大学计算机科学博士,Top15普渡大学计算机博士全奖录取
- 【保姆级教程】Spring Boot单元测试(Controller层的Header处有Token验证的详细示例代码),文末介绍Postman 的基本使用
- 外包档案管理员轻松吗_如何轻松优化任务管理
- ios 表情符号 键盘_更方便地输入颜文字表情:教你如何在 iPhone 键盘中添加颜文字...
- NPN与PNP型传感器的区别
- 网络技术——路由器及其配置
- VS Qt 项目 “fatal error C1083: ”无法打开包括文件
- 中职学校计算机课程标准,中等职业学校信息技术课程标准2020.pdf
- linux格式化挂载的硬盘,linux格式化和挂载硬盘