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文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
python数组复制拷贝的实现方法
Jun 09 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
SVM基本概念及Python实现代码
Dec 27 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
tensorflow如何批量读取图片
Aug 29 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 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
yii添删改查实例
2015/11/16 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
javascript window对象属性整理
2009/10/24 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
JavaScript里实用的原生API汇总
2015/05/14 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
Python如何读取MySQL数据库表数据
2017/03/11 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
GWebs公司笔试题
2012/05/04 面试题
全神贯注教学反思
2014/02/03 职场文书
经典婚礼主持词
2014/03/13 职场文书
食品安全工作实施方案
2014/03/26 职场文书
助理政工师申报材料
2014/06/03 职场文书
行政经理岗位职责
2015/04/15 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
房贷收入证明范本
2015/06/12 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
春季运动会加油词
2015/07/18 职场文书
基层党建工作简报
2015/07/21 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫
Ruby处理CSV数据方法详解
2022/04/18 Ruby