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基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
python颜色随机生成器的实例代码
Jan 10 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
Python输出指定字符串的方法
Feb 06 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
python访问hdfs的操作
Jun 06 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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
php5新改动之短标记启用方法
2008/09/11 PHP
PHP注释实例技巧
2008/10/03 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
vue.js实现的绑定class操作示例
2018/07/06 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
Python 操作MySQL详解及实例
2017/04/30 Python
Python3计算三角形的面积代码
2017/12/18 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
金融专业个人求职信范文
2013/11/28 职场文书
销售人员获奖感言
2014/02/05 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS