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内建函数之raw_input()与input()代码解析
Oct 26 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
Python中print函数简单使用总结
Aug 05 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
Python之变量类型和if判断方式
May 05 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
详解Python flask的前后端交互
Mar 31 Python
Python闭包的定义和使用方法
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基础知识:类与对象(5) static
2006/12/13 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
CentOS安装php v8js教程
2015/02/26 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
总结一些js自定义的函数
2006/08/05 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python实现教务管理系统
2018/03/12 Python
Python笔记之观察者模式
2019/11/20 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Python devel安装失败问题解决方案
2020/06/09 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
pycharm实现猜数游戏
2020/12/07 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
区域经理岗位职责
2015/02/02 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
python中 .npy文件的读写操作实例
2022/04/14 Python