文章目录

  • 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详解相关推荐

  1. python中getattr详解

    python中getattr详解 目录 getattr详解 前言 一.消除if-else 二. 反射机制 三.getattr 详解 总结 getattr详解 前言 这两天在优化腾讯云迁移平台(Smar ...

  2. Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)

    文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...

  3. python中configparser详解_Python中的ConfigParser模块使用详解

    1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该sect ...

  4. python中getattr详解_Python类中方法getitem和getattr详解

    请分享高手帮小编详解一下Python中的getattr内置函数没明白这个内置函数得意思.麻烦帮小编讲解一下. 其实这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以 ...

  5. python中闭包详解

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...

  6. Python中dict详解

    python3.0以上,print函数应为print(),不存在dict.iteritems()这个函数. 在python中写中文注释会报错,这时只要在头部加上# coding=gbk即可 #字典的添 ...

  7. python中getattr详解_Python中如何使用getattr()函数

    Python中如何使用getattr()函数 发布时间:2020-08-12 14:57:55 来源:亿速云 阅读:74 作者:小新 这篇文章将为大家详细讲解有关Python中如何使用getattr( ...

  8. python中ttk详解_Python 中的Property 动态属性和特性详解

    在Python开发时,考虑到安全性,我们会通过使用 '__' 定义私有属性,以限制类外或者子类都不能直接进行访问.操作.但同时,这些私有属性并不是一成不变的,所以我们还需要提供私有属性的对外操作方式. ...

  9. python 中cookie_详解Python中的Cookie模块使用

    最近在用GAE开发自己的博客程序.虽然GAE的API没有显式的提供操作Cookie的方法,但他现有的架构,使我们有足够的自由来操作Cookie. Cookie 模块,顾名思义,就是用来操作Cookie ...

  10. python中configparser详解_python ConfigParser模块详解

    功能介绍 在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单 ...

最新文章

  1. angular2集成highchart
  2. 讲解Linux服务器被黑解决方法
  3. Pollard_rho算法+Miller_Rabin算法(大素数的判断与素因子分解)(模板)
  4. 通讯模块板载天线设计方法
  5. ReactNative开发环境
  6. python-opencv图像处理之车牌识别+区域划分+车牌提取+保存图片(2)
  7. Unity Mask制作圆形头像
  8. Java语言,基于TCP编写一个简单的Client/Server 网络应用程序。
  9. 计算机二级考试题库 操作题,2016计算机二级考试题库:《C++》基本操作题练习...
  10. python-while-函数
  11. 阿里云企业邮箱2019
  12. 在页面添加天气预报显示
  13. 失传万年的PS合成进阶宝典(一)
  14. ts-学习类型-class
  15. 删除数字求最小值(贪心)
  16. (C#).NET调用新浪微博转发
  17. javascript的原型,原型链,内置对象 拖曳对话框 放大镜显示和隐藏遮挡层及大层
  18. idea项目中没有.iml文件
  19. Spring Boot自定义注解+AOP实现日志记录
  20. 【scala安装Windows】

热门文章

  1. 仿山楂岛留言源码/公众号吸粉/短视频引流神器
  2. 普度大学计算机科学博士,Top15普渡大学计算机博士全奖录取
  3. 【保姆级教程】Spring Boot单元测试(Controller层的Header处有Token验证的详细示例代码),文末介绍Postman 的基本使用
  4. 外包档案管理员轻松吗_如何轻松优化任务管理
  5. ios 表情符号 键盘_更方便地输入颜文字表情:教你如何在 iPhone 键盘中添加颜文字...
  6. NPN与PNP型传感器的区别
  7. 网络技术——路由器及其配置
  8. VS Qt 项目 “fatal error C1083: ”无法打开包括文件
  9. 中职学校计算机课程标准,中等职业学校信息技术课程标准2020.pdf
  10. linux格式化挂载的硬盘,linux格式化和挂载硬盘