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实现通过代理服务器访问远程url的方法
Apr 29 Python
python中学习K-Means和图片压缩
Nov 20 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
python递归法解决棋盘分割问题
Jul 17 Python
python 提取文件指定列的方法示例
Aug 07 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
numpy数据类型dtype转换实现
Apr 24 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 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
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python