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实现rsa算法代码
Feb 17 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
python环境下安装opencv库的方法
Mar 05 Python
详解Python3中的 input() 函数
Mar 18 Python
PyTorch在Windows环境搭建的方法步骤
May 12 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
php discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
python实现学生管理系统
2018/01/11 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Python如何将字符串转换为日期
2020/07/31 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
武汉某公司的C#笔试题面试题
2015/12/25 面试题
工程师岗位职责
2013/11/08 职场文书
班级入场式解说词
2014/02/01 职场文书
研讨会主持词
2014/04/02 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
党员目标管理责任书
2014/07/25 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
MySQL池化框架学习接池自定义
2022/07/23 MySQL