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 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
python实现简易数码时钟
Feb 19 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
python with (as)语句实例详解
Feb 04 Python
Django ValuesQuerySet转json方式
Mar 16 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
Python urllib request模块发送请求实现过程解析
Dec 10 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+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS获取父节点方法
2009/08/20 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
再谈JavaScript线程
2015/07/10 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
讲解Python中的标识运算符
2015/05/14 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Django forms组件的使用教程
2018/10/08 Python
python try 异常处理(史上最全)
2019/03/07 Python
Python Flask框架扩展操作示例
2019/05/03 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
Python定义一个函数的方法
2020/06/15 Python
树莓派升级python的具体步骤
2020/07/05 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
提拔干部考察材料
2014/05/26 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书