当前位置: 首页 > news >正文

Python Cookbook-6.12 检查一个实例的状态变化

任务

一个实例在上次“保存”操作之后又被修改了,需要检查它的状态变化以便有选择地保存此实例。

解决方案

一个有效的方案是 mixin 类,这个类可以从多个类继承并能对一个实例的状态进行快照操作,这样就可以用此实例的当前状态和上次的快照做比较,来判断它是否被修改过了:

import copy
class ChangeCheckerMixin(object):containerItems = {dict: dict.iteritems, list: enumerate)immutable = Falsedef snapshot(self):'''创建self状态的“快照”--就像浅拷贝,但只对容器的类型递归(而不是对整个实例:在需要时实例会自行记录自己的状态变化)'''if self.immutable:returnself._snapshot = self._copy_container(self.__dict__)def makeImmutable(self):'''实例状态无法被修改 设置.immutable'''self.immutable = Truetry:del self._snapshotexcept AttributeError:passdef _copy_container(self,container):'''半浅拷贝,只对容器类型递归'''new_container = copy.copy(container)for k,v in self.containerItems[type(new_container)

相关文章:

  • C++11新的特性
  • ZYNQB笔记(十六):AXI DMA 环路测试
  • 开发板型号 ESP32-DevKitC-32模块型号 ESP32-WROOM-32 和主控芯片 ESP32-D0WDQ6-V3
  • 【AI论文】仅通过一个训练样本对大型语言模型进行推理的强化学习
  • RocketMQ常见面试题一
  • Python PyTorch库【机器学习框架】全面深入讲解与实践 入选【全站综合热榜第四】【领域内容榜第一】
  • dify+ollama+知识库 部署
  • 【树莓派Pico FreeRTOS】-FreeRTOS-SMP移植
  • 第十六届 -- 蓝桥杯Web开发大学组省赛个人复盘
  • [FPGA 官方 IP] Binary Counter
  • 编程题python常用技巧-持续
  • 第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题,选择题详细解释
  • 【笔记】深度学习模型训练的 GPU 内存优化之旅③:内存交换篇
  • 如何降低LabVIEW开发费用
  • 自动剪辑批量混剪视频过原创软件工具视频帧级处理技术实践批量截图解析
  • Leetcode刷题记录25——合并区间
  • 移动光猫 UNG853H 获取超级管理员账号密码
  • 一键解放双手,操作丝滑起飞!
  • Vue3 + OpenLayers 企业级应用进阶
  • 【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)
  • 中央党校(国家行政学院)举行2025年春季学期第一批进修班毕业典礼
  • 新开发银行如何开启第二个“金色十年”?
  • 日韩 “打头阵”与美国贸易谈判,汽车、半导体产业忧虑重重
  • 吉林省公安厅出入境管理总队政委明志全已任省安保集团总经理
  • 大学2025丨专访南开人工智能学院院长赵新:人工智能未来会变成通识类课程
  • 上海市政府常务会议研究抓好稳就业稳企业稳市场稳预期工作,让企业感受温度