Python对象属性自动更新操作示例


Posted in Python onJune 15, 2018

本文实例讲述了Python对象属性自动更新操作。分享给大家供大家参考,具体如下:

在软件设计中会遇到这样的问题:有些属性之间有相互关联。这样,其中的一个属性变化的时候其他的属性也应该跟随变化。

先看一段示例代码:

# -*- coding:utf-8 -*-
#!python3
class DemoClss:
  def __init__(self,val1,val2):
    self.val1= val1
    self.val2= val2
    self.sum= self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum)
obj.val1 = 321
print(obj.sum)

代码的执行结果如下:

Python对象属性自动更新操作示例

两个结果一致!其实,这种类似的设计中我们大多时候是希望有一个sum属性跟随者两个数值能够自动变化。但是,上面的这种方式显然是不行的,因为这种设计的生效只能够是在初始化的时候生效。

那么,如果想要实现一个随时求和的方法我们该怎么做呢?其实,我们可以通过方法来实现!代码的改进如下:

# -*- coding:utf-8 -*-
#!python3
class DemoClss:
  def __init__(self,val1,val2):
    self.val1= val1
    self.val2= val2
  def sum(self):
    return self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum())
obj.val1 = 321
print(obj.sum())

程序的执行结果如下:

Python对象属性自动更新操作示例

这样的改进方式是可行的,但是却总觉得有点不方便。因为总体上的实现并没有体现出OOP的什么优势,说穿了这其实还是函数调用而已。那么,能不能改进一下呢?我们期望的又是一种什么样的效果呢?其实,我们需要的功能应该是一个初始化功能而方法功能的一个结合体,而这种类似功能的结合体是存在的,那就是特性。特性是一种看上去像方法的属性,每次引用都会执行相关的方法。如此,代码改进如下:

# -*- coding:utf-8 -*-
#!python3
class DemoClss:
  def __init__(self,val1,val2):
    self.val1= val1
    self.val2= val2
  @property
  def sum(self):
    return self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum)
obj.val1 = 321
print(obj.sum)

程序执行结果如下:

Python对象属性自动更新操作示例

这样就实现了关联属性的自动更新,看上去更加符合人们的正常思维了。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现在windows服务中新建进程的方法
Jun 30 Python
ansible作为python模块库使用的方法实例
Jan 17 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
python实现傅里叶级数展开的实现
Jul 21 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
详解Django配置优化方法
Nov 18 Python
python 消费 kafka 数据教程
Dec 21 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
Django正则URL匹配实现流程解析
Nov 13 Python
numpy使用fromstring创建矩阵的实例
Jun 15 #Python
详解Python 协程的详细用法使用和例子
Jun 15 #Python
在NumPy中创建空数组/矩阵的方法
Jun 15 #Python
numpy中矩阵合并的实例
Jun 15 #Python
对numpy中shape的深入理解
Jun 15 #Python
Python基于property实现类的特性操作示例
Jun 15 #Python
使用python 3实现发送邮件功能
Jun 15 #Python
You might like
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
php写的简易聊天室代码
2011/06/04 PHP
常用PHP框架功能对照表
2014/10/23 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
拖动一个HTML元素
2006/12/22 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
.net笔试题
2014/03/03 面试题
毕业生物理教师求职信
2013/10/17 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
食堂员工工作职责
2013/12/18 职场文书
数学教学随笔感言
2014/02/17 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python