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发送arp欺骗攻击代码分析
Jan 16 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
python绘制简单折线图代码示例
Dec 19 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
python变量的存储原理详解
Jul 10 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
python statsmodel的使用
Dec 21 Python
利用Python读取微信朋友圈的多种方法总结
Aug 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 curl选项列表(超详细)
2013/07/01 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
js实现无缝滚动图
2017/02/22 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
使用python接入微信聊天机器人
2020/03/31 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
房务中心文员岗位职责
2014/04/16 职场文书
安全技术说明书
2014/05/09 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
放假通知范文
2015/04/14 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
如何在Python项目中引入日志
2021/05/31 Python
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js