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实现简单ftp客户端的方法
Jun 28 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
python3如何将docx转换成pdf文件
Mar 23 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
解析python的局部变量和全局变量
Aug 15 Python
如何基于python实现脚本加密
Dec 28 Python
pandas中ix的使用详细讲解
Mar 09 Python
使用python实现名片管理系统
Jun 18 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 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
构建简单的Webmail系统
2006/10/09 PHP
php的一个简单加密解密代码
2014/01/14 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
python机器学习库常用汇总
2017/11/15 Python
python numpy格式化打印的实例
2018/05/14 Python
Python 变量类型详解
2018/10/10 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
毕业生个人总结
2015/02/28 职场文书
加薪申请报告范本
2015/05/15 职场文书
中学总务处工作总结
2015/08/12 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书