【学习笔记】两个类之间的数据交互方式

在面向对象编程中,两个类之间的数据交互可以通过以下几种方式实现,具体选择取决于需求和设计模式:

1. 通过方法调用

一个类通过调用另一个类的公共方法来获取或传递数据。这是最常见的方式,符合封装原则。

class ClassA:def __init__(self, value):self.value = valuedef get_value(self):return self.valueclass ClassB:def __init__(self, class_a):self.class_a = class_adef print_value(self):print(self.class_a.get_value())# 使用
a = ClassA(42)
b = ClassB(a)
b.print_value()

2. 通过构造函数传递依赖

在类的初始化时,将另一个类的实例作为参数传递。这种方式常用于依赖注入。

class ClassA:def __init__(self, data):self.data = dataclass ClassB:def __init__(self, class_a):self.class_a = class_adef show_data(self):print(self.class_a.data)# 使用
a = ClassA("Hello")
b = ClassB(a)
b.show_data()

3. 通过属性共享

两个类共享某些公共属性(通常通过全局变量或单例模式实现)。这种方式需要谨慎使用,可能会导致耦合性过高。

class SharedData:value = Noneclass ClassA:def set_value(self, value):SharedData.value = valueclass ClassB:def get_value(self):return SharedData.value# 使用
a = ClassA()
b = ClassB()a.set_value(100)
print(b.get_value())

4. 通过事件或回调

一个类触发事件,另一个类通过回调函数响应。这种方式适合解耦。

class ClassA:def __init__(self):self.callback = Nonedef set_callback(self, callback):self.callback = callbackdef trigger_event(self):if self.callback:self.callback("Event triggered!")class ClassB:def handle_event(self, message):print(f"ClassB received: {message}")# 使用
a = ClassA()
b = ClassB()a.set_callback(b.handle_event)
a.trigger_event()

5. 通过设计模式

可以使用设计模式(如观察者模式、发布-订阅模式、依赖注入等)来实现更复杂的交互。


总结

  • 如果交互简单,优先使用方法调用。
  • 如果需要解耦,考虑事件、回调或设计模式。
  • 避免直接访问另一个类的内部数据,遵循封装原则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络学习--误差反向传播法

最近在学习神经网络,主要是依据书本《深度学习入门(基于Python的理论与实现)》,现对第5章“误差反向传播法”中的示例程序进行注释修改如下,以备后续查阅。 编程软件用的是Eric7,界面如下: 神经…

前端常用组件库全览与推荐

📌 一、组件库生态全景图 🚀 二、React 生态组件库推荐 名称简介官网Ant Design阿里出品,企业级 UI 系统,设计规范完整,适合后台系统https://ant.designMaterial UIGoogle Material Design 实现,样式响应式…

群晖如何通过外网访问

1、进入群晖控制面板-》连接性-》外部访问-》DDNS 2、新增,添加DDNS 选择服务供应商,我这里以DNSPod.cn为例。 3、这一步开始,需要前往DNSPod.cn进行注册域名(也可以使用你已有的域名,转入即可)&#xff0…

3.2.2.1 Spring Boot配置静态资源映射

在Spring Boot中配置静态资源映射,可以通过默认路径或自定义配置实现。默认情况下,Spring Boot会在classpath:/static/等目录下查找静态资源。若需自定义映射,可通过实现WebMvcConfigurer接口的addResourceHandlers方法或在全局配置文件中设置…

【概念】什么是UI(User interface)什么是UX(User experience)?

1. 软件生命周期管理 (Software Life Cycle Management) 解释: 中文: 软件生命周期管理是指从软件规划、设计、开发、测试、部署到后续维护甚至退役的整个过程。English: Software Life Cycle Management refers to the systematic process of plannin…

第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组

由于官方没有公布题目的数据, 所以代码仅供参考 1. 移动距离 题目链接:P12130 [蓝桥杯 2025 省 B] 移动距离 - 洛谷 【问题描述】 小明初始在二维平面的原点,他想前往坐标 (233, 666)。在移动过程中,他 只能采用以下两种移动方式&#xf…

​​IPerf工具使用笔记(基于MobaXterm串口终端)​

​​一、问题现象​​ ​​终端输入无响应​​ 启动iperf服务器后,终端被阻塞,无法输入其他命令(如图中重复输出日志覆盖输入区域)。​​直接原因​​:iperf_server线程未正确处理退出标志,导致select或acc…

【从C到C++的算法竞赛迁移指南】第五篇:现代语法糖精粹 —— 写出优雅的竞赛代码

系列导航: [第一篇] 基础语法与竞赛优势[第二篇] 动态数组与字符串革命[第三篇] 映射与集合的终极形态[第四篇] STL算法与迭代器[▶ 本篇] 现代语法糖精粹[第六篇] 竞赛实战技巧 一、范围for循环:告别索引的束缚 1.1 C风格遍历的四大痛点 // 痛点示例&…

mongodb在window10中创建副本集的方法

创建Mongodb的副本集最好是新建一个文件夹,如D:/data,不要在mongodb安装文件夹里面创建副本集,虽然这样也可以,但是容易造成误操作或路径混乱;在新建文件夹里与现有 MongoDB 数据隔离,避免误操作影响原有数…

使用Python进行AI图像生成:从GAN到风格迁移的完整指南

AI图像生成是一个非常有趣且前沿的领域,结合了深度学习和计算机视觉技术。以下是一些使用Python和相关库进行AI图像生成的创意和实现思路: 1. 使用GAN(生成对抗网络) 基本概念:GAN由两个神经网络组成:生成…

P10413 [蓝桥杯 2023 国 A] 圆上的连线

题意: 给定一个圆,圆上有 n2023 个点从 1 到 n 依次编号。 问有多少种不同的连线方式,使得完全没有连线相交。当两个方案连线的数量不同或任何一个点连接的点在另一个方案中编号不同时,两个方案视为不同。 答案可能很大&#x…

鸿蒙5.0 非桌面页面,设备来电后挂断,自动返回桌面

1.背景 其实在Android上面打开一个应用,然后设备来电后挂断应该是返回到前面打开的这个应用的,但是在鸿蒙里面现象是直接返回桌面,设计如此 2.分析 这个分析需要前置知识,鸿蒙的任务栈页面栈,具体参考如下链接: zh-cn/application-dev/application-models/page-missio…

智能Todo协作系统开发日志(二):架构优化与安全增强

📅 2025年4月14日 | 作者:Aphelios380 🌟 今日优化目标 在原Todo单机版基础上进行三大核心升级: 组件化架构改造 - 提升代码可维护性 本地数据加密存储 - 增强隐私安全性 无障碍访问支持 - 践行W3C标准 一、组件化架构改造 …

linux电源管理(二),内核的CPUFreq(DVFS)和ARM的SCPI

更多linux系统电源管理相关的内容请看:https://blog.csdn.net/u010936265/article/details/146436725?spm1011.2415.3001.5331 1 简介 CPUFreq子系统位于drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DVFS (Dynami…

mysql 数据库localhost密码忘记

使用此查询语句: SELECT user, authentication_string FROM mysql.user WHERE user root; 复制对应的密码: 密码是通过md5加密后的 md5在线解密破解,md5解密加密 将密码输入进来 就可以直接破解了

05、Docker run命令实战:数据卷与挂载的完整指南(下)

5.1、深度剖析 docker run 命令:原理阐释与数据持久化实践探究 1、更换国内yum源2、更换国内docker源3、卸载旧版docker4、docker安装5、镜像加速器6、镜像下载7、docker run命令交互式启动-it非交互式后台运行其他参数mysql综合案例8、持久化存储目录挂载数据卷挂载数据同步1…

macOS 上使用 Homebrew 安装和配置 frp 客户端

macOS 上使用 Homebrew 安装和配置 frp 客户端 (frpc) 指南 frp (Fast Reverse Proxy) 是一款高性能的反向代理应用,常用于内网穿透。本文将介绍在 macOS 上使用 Homebrew 安装 frpc,并进行配置和管理。 一、安装 frpc 使用 Homebrew 安装(…

泊松分布详解:从理论基础到实际应用的全面剖析

泊松分布详解:从理论基础到实际应用的全面剖析 目录 引言:事件的罕见性与随机计数泊松分布的历史源流泊松分布的数学定义与性质 概率质量函数 (PMF)累积分布函数 (CDF)期望、方差与其他矩矩生成函数 (MGF) 与特征函数 (CF) 泊松分布的严格推导 极限推导…

红宝书第三十六讲:持续集成(CI)配置入门指南

红宝书第三十六讲:持续集成(CI)配置入门指南 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、什么是持续集成? 持续集成(CI)就像咖啡厅的…

python 办公自动化------ excel文件的操作,读取、写入

一、excel文件的读取 需要安装的包:xlrd:读取;xlwt:写入;xlutils:分割、复制、筛选 sudo:表示以管理员身份运行命令(mac系统中使用) >sudo pip install xlrd xlwt x…