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 相关文章推荐
Django中URLconf和include()的协同工作方法
Jul 20 Python
python实现红包裂变算法
Feb 16 Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
python3.5使用tkinter制作记事本
Jun 20 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Python查找文件中包含中文的行方法
Dec 19 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
python实现随机漫步方法和原理
Jun 10 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
python字典改变value值方法总结
Jun 21 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
Python urlencode和unquote函数使用实例解析
Mar 31 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 tp验证表单与自动填充函数代码
2012/02/22 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
python使用range函数计算一组数和的方法
2015/05/07 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
python实现矩阵乘法的方法
2015/06/28 Python
python写日志封装类实例
2015/06/28 Python
python简单文本处理的方法
2015/07/10 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
考博专家推荐信模板
2013/12/02 职场文书
人力资源职位说明书
2014/07/29 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
兵马俑的导游词
2015/02/02 职场文书
保姆聘用合同
2015/09/21 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
建立共青团委员会的请示
2019/04/02 职场文书