【學習筆記】兩個類之間的數據交互方式

在面向對象編程中,兩個類之間的數據交互可以通過以下幾種方式實現,具體選擇取決于需求和設計模式:

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.pswp.cn/pingmian/76810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76810.shtml
英文地址,請注明出處:http://en.pswp.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…