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 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Django实现组合搜索的方法示例
Jan 23 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
python3去掉string中的标点符号方法
Jan 22 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
python如何把字符串类型list转换成list
Feb 18 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
解决Python安装cryptography报错问题
Sep 03 Python
python Xpath语法的使用
Nov 26 Python
python 调用js的四种方式
Apr 11 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禁止浏览器使用缓存页面的方法
2014/11/07 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
js 内存释放问题
2010/04/25 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
tensorboard显示空白的解决
2020/02/15 Python
django使用JWT保存用户登录信息
2020/04/22 Python
应届生人事助理求职信
2013/11/09 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android