python的观察者模式案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 二、具体代码
- 写在结尾
前言
最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有这种模式设计,今天专门学习并总结了一下
提示:以下是本篇文章正文内容,下面案例可供参考
二、具体代码
代码如下(示例):
class Observer: # 构建一个观察者def update(self, observable, *args, **kwargs):passclass Observable: # 构建一个被观察者def __init__(self):self._observers = []def add_observer(self, observer):self._observers.append(observer) # 添加观察者对象def remove_observer(self, observer): # 移除观察者对象self._observers.remove(observer)def notify_observers(self, *args, **kwargs): # 通知每一个观察者for observer in self._observers:observer.update(self, *args, **kwargs) # 注意,这里的self传入的是对象本身class TicketSystem(Observable): # 票务系统类def __init__(self, ticket_price):super().__init__()self.__ticket_price = ticket_price@propertydef ticket_price(self):return self.__ticket_price@ticket_price.setterdef ticket_price(self, price):self.__ticket_price = priceself.notify_observers(price)class User(Observer): # 用户def update(self, observable, *args, **kwargs):print('user: {} is now ticket_price {}'.format(observable, args[0])) # 这里的observable就是对象本身class Scalper(Observer): # 黄牛def update(self, observable, *args, **kwargs):print('scalper: {} is now ticket_price {}'.format(observable, args[0]))if __name__ == '__main__':system = TicketSystem(18) # 构建票务系统user_obj = User() # 构建用户对象scalper_obj = Scalper() # 构建黄牛对象system.add_observer(user_obj) # 用户注册回调system.add_observer(scalper_obj) # 黄牛注册回调system.ticket_price = 20 # 修改票价为20system.remove_observer(user_obj) # 用户取消回调system.ticket_price = 15 # 修改票价为18
运行结果

写在结尾
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步
相关文章:
python的观察者模式案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言二、具体代码写在结尾 前言 最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有…...
C语言——类型转换
数据有不同的类型,不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成强制类型转换:把表达式的运算结果强制转换成所需的数据类型 语法格…...
jmeter性能测试入门完整版
1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇&…...
报错sql_mode=only_full_group_by
首发博客地址 https://blog.zysicyj.top/ 报错内容 ### The error may exist in file[D:\code\cppCode20221025\leader-system\target\classes\mapper\system\TJsonDataMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while…...
伪造 IP 地址的原理和防范措施
在数字化时代,网络安全是至关重要的话题。其中,伪造 IP 地址是一种可能导致网络攻击和欺诈的技术手段。这里将深入探讨伪造 IP 地址的原理以及如何采取措施来防范这种风险。 一.伪造 IP 地址的原理 伪造 IP 地址是一种操纵网络通信的方式,它…...
Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型
文章目录 获取挂载路径监控U盘热拔插事件libusb 文件系统类型通过挂载点获取挂载路径添libudev加库 获取挂载路径 #include <stdio.h> #include <libudev.h> #include <string.h>int main() {struct udev *udev;struct udev_enumerate *enumerate;struct ud…...
【会议征稿】2023智能通信与网络国际学术会议(ICN 2023)
2023智能通信与网络国际学术会议(ICN 2023) 2023 International Conference on Intelligent Communication and Networking (ICN2023) 2023智能通信与网络国际学术会议(ICN 2023)将于2023年11月10-12日在中国常州召开。ICN 2023…...
Android投屏总结
#android手机投屏 ####导语 至于手机投屏的实现方法可谓五花八门,今天小袁就说下以开发人员的角度来说下当今手机的主流投屏方法。目前这种将终端信号经由WiFi传输到电视、电视盒的技术有三种:DLNA、AirPlay、Miracast、Google Cast。 ##手机投屏智能电…...
vue2 组件组成部分,组件通信,进阶语法
一、学习目标 1.组件的三大组成部分(结构/样式/逻辑) scoped解决样式冲突/data是一个函数 2.组件通信 组件通信语法父传子子传父非父子通信(扩展) 4.进阶语法 v-model原理v-model应用于组件sync修饰符ref和$refs$nextTic…...
信看课堂笔记—LDO和DC-DC电路打PK
LDO(low dropout voltage regulator,低压差线性稳压器)和DC-DC(Direct current-Direct current converter,直流电压转直流电压转换器)电源是非常常见的电源电路,LDO 出来的比较早,像老戏骨一样,…...
C++ Day6
目录 一、菱形继承 1.1 概念 1.2 格式 二、虚继承 2.1 作用 2.2 格式 2.3注意 三、多态 3.1函数重写 3.2 虚函数 3.3 赋值兼容规则 3.4 多态中,函数重写的原理 3.5 虚析构函数 3.5.1 格式 3.6 纯虚函数 3.6.1格式 四、抽象类 五、模板 5.1模板的特…...
分布式系统与微服务的区别是什么?
分布式系统和微服务是两个相关但不同的概念,它们都是在构建复杂的软件应用时使用的架构思想。 分布式系统: 分布式系统是指由多个独立的计算机或服务器通过网络连接共同工作,协同完成一个任务或提供一个服务。在分布式系统中,各个…...
python:用python构建一个物联网平台
要使用Python构建物联网平台,您需要考虑以下步骤: 确定平台的基本要求和功能 首先,您需要明确您将要构建的平台的功能和特点。例如,您可能需要支持多种设备,并使用各种传感器来收集数据。您可能需要实现实时数据可视化…...
基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO
Qt5——WiringPi Qt5WiringPi示例教程 Qt5 Qt是一种跨平台的应用程序开发框架。它被广泛应用于图形用户界面(GUI)开发,可以用于构建桌面应用程序、移动应用程序和嵌入式应用程序。Qt提供了丰富的功能和工具,使开发人员可以快速、高…...
【MySQL】组合查询
目录 一、组合查询 1.创建组合查询 2.union规则 3.包含或取消重复的行 4.对组合查询结果排序 一、组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查…...
ChatGPT:引领人机交互的未来
前言 在信息技术飞速发展的时代,人机交互的方式也在不断演进。技术对人们生活和工作的影响。本文将带您深入探讨一款引领人机交互未来的人工智能模型——ChatGPT。 ChatGPT简介 ChatGPT 是一种由开放AI(OpenAI)开发的人工智能模型…...
【算法】经典的八大排序算法
点击链接 可视化排序 动态演示各个排序算法来加深理解,大致如下 一,冒泡排序(Bubble Sort) 原理 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次比较和交换相邻元素的方式,将…...
防溺水预警识别系统算法
防溺水预警识别系统旨在通过opencvpython网络模型深度学习算法,防溺水预警识别系统算法实时监测河道环境,对学生等违规下水游泳等危险行为进行预警和提醒。Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行࿰…...
Redis 的整合 Jedis 使用
大家好 , 我是苏麟 , 今天带来 Jedis 的使用 . Jedis的官网地址: GitHub - redis/jedis: Redis Java client 引入依赖 <!--jedis--> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version…...
Mainline Linux 和 U-Boot编译
By Toradex胡珊逢 Toradex 自从 Linux BSP v6 开始在使用 32位处理器的 Arm 模块如 iMX6、iMX6ULL、iMX7 上提供 mainline/upstream kernel ,部分 64位处理器模块如 Verdin iMX8M Mini/Plus 也提供实验性支持。文章将以季度发布版本 Linux BSP V6.3.0 为例介绍如何下…...
不止于置顶:挖掘AfloatX的隐藏玩法,调节窗口透明度让你的Mac工作流更沉浸
不止于置顶:挖掘AfloatX的隐藏玩法,调节窗口透明度让你的Mac工作流更沉浸 当大多数Mac用户还在用分屏功能机械地排列窗口时,一小群效率极客已经通过窗口透明度调节构建出三维工作空间。AfloatX这款免费工具提供的不仅是基础的置顶功能&#x…...
北航毕业论文LaTeX模板终极指南:快速掌握专业排版技巧
北航毕业论文LaTeX模板终极指南:快速掌握专业排版技巧 【免费下载链接】BUAAthesis 北航毕设论文LaTeX模板 项目地址: https://gitcode.com/gh_mirrors/bu/BUAAthesis 还在为北航毕业论文的格式要求而烦恼吗?手动调整页边距、页眉页脚、参考文献格…...
抖音直播弹幕数据抓取实战:5分钟搭建实时监控系统
抖音直播弹幕数据抓取实战:5分钟搭建实时监控系统 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2025最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 你是否曾想过࿰…...
基于语义搜索与向量数据库的AI工具发现引擎Lyra架构与实践
1. 项目概述与核心价值最近在折腾一个AI驱动的工具发现平台,核心是解决一个很实际的问题:面对市面上成千上万、层出不穷的AI工具和开源项目,我们如何高效地找到真正适合自己需求的那一个?不是简单地罗列清单,而是能理解…...
星链引擎矩阵系统:全球边缘计算与三级算力调度技术实践
摘要星链引擎矩阵系统作为支撑全球万级账号并发运营的企业级平台,传统中心化云计算架构存在跨区域网络延迟高、平台接口调用失败率高、账号关联风险大、算力资源浪费严重等核心痛点,无法满足全球化矩阵运营需求。星链引擎自研的全球边缘计算网络采用 &qu…...
GPT Image 2 刷屏之后,我才发现真正该补的是向量引擎:deepseek v4、api、key 和 Agent 工作流实战笔记
GPT Image 2 刷屏之后,我才发现真正该补的是向量引擎:deepseek v4、api、key 和 Agent 工作流实战笔记雷猴啊,最近 AI 圈又热闹了。 前脚大家还在讨论 Agent 能不能自己写代码、自己跑任务、自己做项目;后脚 GPT Image 2 又把生图…...
FPGA实现JPEG-LS硬件编码器:架构、算法与工程实践
1. 项目概述:一个开源的JPEG-LS硬件编码器最近在翻看一些开源硬件项目时,看到了一个名为“FPGA-JPEG-LS-encoder”的仓库。这个项目由WangXuan95维护,从名字就能一眼看出,它是一个用硬件描述语言实现的JPEG-LS图像压缩编码器&…...
零基础录音转日程教程包教包会避坑,看完就能直接上手
做销售近5年,日常需频繁跑客户拜访、对接客户,每次沟通结束后,将录音整理成待办日程都十分繁琐,先和大家分享我之前踩过的一些坑,不少同行可能也有类似经历。第一个坑是误以为录音转日程,只需先将录音转成文…...
代码可视化工具:从AST解析到自动化图表生成的技术实践
1. 项目概述:从代码到图形的自动化桥梁在软件开发、架构设计乃至技术文档编写的日常工作中,我们常常面临一个共同的痛点:如何清晰、高效地向他人(或未来的自己)解释一段复杂的代码逻辑、一个系统的模块关系,…...
CubeMX默认配置的坑:STM32 LPUART的ORE溢出错误如何彻底解决(从寄存器到HAL库的避坑指南)
STM32 LPUART的ORE溢出错误:从硬件机制到HAL库的深度解决方案 当你在深夜调试STM32的LPUART接口时,突然发现串口"神秘"地停止了响应——这种场景对于经验丰富的嵌入式工程师来说并不陌生。问题的根源往往指向那个容易被忽视的Overrun Error&am…...
