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正则表达式匹配ip地址实例
Oct 09 Python
实例说明Python中比较运算符的使用
May 13 Python
分享一下Python 开发者节省时间的10个方法
Oct 02 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python数据封装json格式数据
Mar 04 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
numpy中的delete删除数组整行和整列的实例
May 09 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
python实现在线翻译功能
Mar 03 Python
Python IO文件管理的具体使用
Mar 20 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堆栈调试操作简单示例
2018/06/15 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python基于socket实现网络广播的方法
2015/04/29 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python理解递归的方法总结
2019/01/28 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
电子商务专员岗位职责
2013/12/11 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
陈欧的广告词
2014/03/18 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
中学教师师德承诺书
2014/05/23 职场文书
法人委托书范本
2014/09/15 职场文书
停车位租赁协议书
2014/09/24 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
公务员个人年终总结
2015/02/12 职场文书
学困生转化工作总结
2015/08/13 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python