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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
python基础教程之分支、循环简单用法
Jun 16 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python解释器spython使用及原理解析
Aug 24 Python
pymysql 开启调试模式的实现
Sep 24 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 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
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
Python 12306抢火车票脚本
2018/02/07 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python之文件读取一行一行的方法
2018/07/12 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
Python中包的用法及安装
2020/02/11 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
精选奢华:THE LIST
2019/09/05 全球购物
开工仪式主持词
2014/03/20 职场文书
《雪儿》教学反思
2014/04/17 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
法人代表证明书
2014/09/18 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
建党伟业的观后感
2015/06/01 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技