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操作csv文件实例详解
Jul 31 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
python 实现调用子文件下的模块方法
Dec 07 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
python构建指数平滑预测模型示例
Nov 21 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Python select及selectors模块概念用法详解
Jun 22 Python
Python+OpenCV实现图片中的圆形检测
Apr 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
解析PHP汉字转换拼音的类
2013/06/18 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
php计算整个目录大小的方法
2015/06/01 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
js同源策略详解
2015/05/21 Javascript
javascript常用的方法分享
2015/07/01 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
vue实现登录拦截
2020/06/29 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
python生成随机图形验证码详解
2017/11/08 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
幼儿园教师培训制度
2014/01/16 职场文书
承诺书格式范文
2014/06/03 职场文书
团队口号大全
2014/06/06 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
银行给客户的感谢信
2015/01/23 职场文书
村主任当选感言
2015/08/01 职场文书
2016公司新年问候语
2015/11/11 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
Golang 如何实现函数的任意类型传参
2021/04/29 Golang