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设计模式之观察者模式实例
Apr 26 Python
详细解析Python当中的数据类型和变量
Apr 25 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
python3.x实现base64加密和解密
Mar 28 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
wxPython之wx.DC绘制形状
Nov 19 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
Django实现后台上传并显示图片功能
May 29 Python
浅谈Python数学建模之整数规划
Jun 23 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调用C#开发的dll类库方法
2014/07/28 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP的几个常用加密函数
2016/02/03 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
学习jquery之一
2007/04/27 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
JavaScript实现通讯录功能
2020/12/27 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
Scrapy框架使用的基本知识
2018/10/21 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
就业自荐书
2013/12/05 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
优秀党员先进材料
2014/12/18 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
公司人事任命通知
2015/04/20 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
人与自然的观后感
2015/06/18 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis