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中__call__用法实例
Aug 29 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
numpy 声明空数组详解
Dec 05 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
在Python 的线程中运行协程的方法
Feb 24 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
python3.9之你应该知道的新特性详解
Apr 29 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学习笔记(三)操作符与控制结构
2011/08/06 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python交互环境下实现输入代码
2018/06/22 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
数控个人求职信范文
2014/02/03 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
吴仁宝观后感
2015/06/09 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers