Python对象属性自动更新操作示例
本文实例讲述了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)
代码的执行结果如下:
两个结果一致!其实,这种类似的设计中我们大多时候是希望有一个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())
程序的执行结果如下:
这样的改进方式是可行的,但是却总觉得有点不方便。因为总体上的实现并没有体现出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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
相关推荐
-
利用Python如何批量更新服务器文件
前言 买了个Linux服务器,Centos系统,装了个宝塔搭建了10个网站,比如有时候要在某个文件上加点代码,就要依次去10个文件改动,虽然宝塔是可视化页面操作,不需要用命令,但是也麻烦,虽然还有git的hook方法,但是操作也麻烦,新建个目录的话还得操作一次,所以萌生了一个想法,用Python来批量更新服务器上的文件 序言 在网上搜索了一圈,发现Python有个库叫paramiko可以专门拿来干这个事,具体资料和安装就网上去搜索吧,我就直接上代码了,不到100行,其实还可以精简吧,后面再说了,
-
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 : 字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的:但键不行,如果同一个键被赋值两次,后一个值会被记住. 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组(列表这样的可变类型不能作为键). 一.字典的创建.访问: dict = {'Name': 'Zara', 'Age': 7,
-
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
检测文件夹,拷贝有更新的文件到对应目录 2016.5.19 亲测可用,若有借鉴请修改下文件路径: 学习python小一个月后写的这个功能,属于初学,若有大神路过,求代码优化~ newcopy.py: 检测文件夹中最后修改时间变化的文件,并拷贝复制到相应路径下,拷贝目录会自动检测后输出:测试文件夹路径记得修改: pyinotify.py: 借用window接口,检测脚本所在目录下文件夹变化(更新.删除.添加等),输出日志到桌面上: # newcopy.py文件 # -*- coding:UTF-8
-
Python中pip更新和三方插件安装说明
一.Python安装: 最新Python版本的下载和安装可以参考我的这篇博客,里面有步骤说明和注意事项. 二.手动更新pip:在安装第三方插件时如果提示pip版本需更新,可以这样做: 1.在这里下载pip的更新版本,选择箭头所指的文件下载到你电脑的某处并解压.如果从官网下载失败,也可以下载我的这个. 2.进入控制台,找到解压文件目录,以解压到桌面为示范: setup.py工具可以为所需模块创建一个可安装的源码包,按回车键等执行完,再输入:python setup.py install,再回车开始
-
更新修改后的Python模块方法
python如何更新修改后的Python模块 1.利用python的MySQLdb模块利用原生的sql语句进行更新的方法代码 配置方法代码 2.使用execute方法执行SQL语句方法代码 方法二: 1.利用python的框架flask和sqlalchemy进行更新的方法代码: 配置数据库的方法代码 2.执行链接数据库的方法代码 3.处理数据表的方法代码 4.执行更新数据库函数的代码 方法三: 1.防止数据对象被reload重置的编码方案的方法代码 2.用reload的封装使用的方法代码
-
Python对象属性自动更新操作示例
本文实例讲述了Python对象属性自动更新操作.分享给大家供大家参考,具体如下: 在软件设计中会遇到这样的问题:有些属性之间有相互关联.这样,其中的一个属性变化的时候其他的属性也应该跟随变化. 先看一段示例代码: # -*- coding:utf-8 -*- #!python3 class DemoClss: def __init__(self,val1,val2): self.val1= val1 self.val2= val2 self.sum= self.val1 + self.val2
-
Python 实现网页自动截图的示例讲解
背景介绍 最近在为部门编写一个自动化测试工具,工具涉及到一个功能,即 将自动化测试生成的html报告截图,作为邮件正文,html文件上传到web服务器以链接形式添加到邮件中,最后发送邮件. 任务难点 之前从未接触过页面自动截图相关的方面,因此如何自动进行页面截图成为本地调研方向. 方案思考 在刚接到这个任务时,并不认同目前的方案.曾经一度认为,将html报告的内容写入邮件正文,即可通过html的形式发送邮件了.经过尝试后发现,邮件不支持带javascript的html.因此,选择了预览html并
-
Python实现邮件自动下载的示例详解
开始码代码之前,我们先来了解一下三种邮件服务协议: 1.SMTP协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议.相当于中转站,将邮件发送到客户端. 2.POP3协议 POP3(Post Office Protocol 3),即邮局协议的第3个版本,是电子邮件的第一个离线协议标准.该协议把邮件下载到本地计算机,不与服务器同步,缺点是更易丢失邮件或多次下载相同的邮件. 3.IMAP协议 IMAP(Internet Mail Access Protoc
-
PostgreSQL数据库事务插入删除及更新操作示例
目录 INSERT DELETE UPDATE 事务 INSERT 使用INSERT语句可以向表中插入数据. 创建一个表: CREATE TABLE ProductIns (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL, sale_price INTEGER DEFAULT 0, purchase_price INTEGER , regist_d
-
python实现校园网自动登录的示例讲解
因为最近想用树莓派搞个远程监控系统,又因为学校的网需要从网页登录而树莓派又不方便搞个显示器带着,所以寻思着搞个能够自动登录校园网的脚本程序,省去了每次都要打开浏览器输入账号密码的烦恼. 1.工具 火狐浏览器+firedebug插件,debug插件可才浏览器中附加组件中添加,其他浏览器也可以只要可以监控浏览器的网络行为即可. python+requests包 2.步骤 1) 先打开到登录界面,然后在按f12打开firedebug插件,此时debug无任何记录行为,然后点击刷新按钮,再点击登录按钮
-
VUE 实现动态给对象增加属性,并触发视图更新操作示例
本文实例讲述了VUE 实现动态给对象增加属性,并触发视图更新操作.分享给大家供大家参考,具体如下: 在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新. Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property).然而它可以使用
-
Python实现动态给类和对象添加属性和方法操作示例
本文实例讲述了Python实现动态给类和对象添加属性和方法操作.分享给大家供大家参考,具体如下: 动态给类和对象添加属性 定义一个Person类 class Person(object): def __init__(self, name): self.name = name 给对象添加属性 # 创建2个Person,分别为p1,p2 p1 = Person('amy') print(p1.name) p1.age = 10 # 给p1对象添加属性 print(p1.age) # 输出10 p2
-
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
本文实例讲述了python从任意长度的可迭代对象中分解元素操作.分享给大家供大家参考,具体如下: 从某个可迭代对象中分解出N个元素,但是可迭代对象的长度可能超过N,会出现"分解值过多"的异常: 使用"*表达式"来解决该问题: Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Type "copyright",
-
Python实现动态添加属性和方法操作示例
本文实例讲述了Python实现动态添加属性和方法操作.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 class Person(): def __init__(self, name, age): self.name = name self.age = age p1 = Person('ff', '28') print(p1.name, p1.age) # 给实例对象动态添加sex属性 p1.sex = 'female' print(p1.sex
-
Python使用sqlalchemy模块连接数据库操作示例
本文实例讲述了Python使用sqlalchemy模块连接数据库操作.分享给大家供大家参考,具体如下: 安装: pip install sqlalchemy # 安装数据库驱动: pip install pymysql pip install cx_oracle 举例:(在url后面加入?charset=utf8可以防止乱码) from sqlalchemy import create_engine engine=create_engine('mysql+pymysql://username:p
随机推荐
- Vue filter介绍及其使用详解
- perl查找进程PID的例子
- sqlserver和oracle中对datetime进行条件查询的一点区别小结
- 使用正则表达式替换表情符号核心代码
- 浅谈ASP.NET中多层架构
- WPF气泡样式弹窗效果代码分享
- 解读ASP.NET密码强度验证代码实例分享
- 10个易被忽视但应掌握的Python基本用法
- 解决Python requests 报错方法集锦
- JavaScript 字符串操作的几种常见方法
- 侧栏跟随滚动的简单实现代码
- js报错 Object doesn't support this property or method的原因分析
- Android 图片网格布局控件示例代码
- JS的IE和Firefox兼容性集锦
- php递归方法实现无限分类实例代码
- 个人写的PHP验证码生成类分享
- 预防游泳时发生头晕和腿抽筋解决方法集锦第1/5页
- 浅谈react-router HashRouter和BrowserRouter的使用
- Matlab实现数据的动态显示方法
- elementUI多选框反选的实现代码