首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Python 類之間方法調用:透過實例引用實現組合模式

     編輯:程式設計綜合問答

問題場景

wxPython 專案中,MyButton 需調用 TextBox 的 Clear() 方法,但兩者為獨立類,尚未建立實例關係。

解決方案:依賴注入 / 組合引用

在包含兩者的容器類(如主視窗)中建立實例並互相引用:

class MainFrame(wx.Frame):
    def __init__(self):
        self.text_box = TextBox(self)
        self.my_button = MyButton(self)
        # 將 text_box 引用傳給 button
        self.my_button.set_text_box(self.text_box)

class MyButton(wx.Button):
    def __init__(self, parent):
        super().__init__(parent, label='清空')
        self.text_box = None
        self.Bind(wx.EVT_BUTTON, self.on_click)

    def set_text_box(self, text_box):
        self.text_box = text_box

    def on_click(self, event):
        if self.text_box:
            self.text_box.Clear()

核心原則

  • 類不直接調用類,而是透過實例引用調用方法。
  • 使用 Setter 注入 或建構子注入建立關聯,降低耦合。
  • 避免單例/全域變數,便於測試與多實例場景。

進階:事件總線解耦

若組件眾多,可引入 pubsub 或自訂事件總線:

from pubsub import pub
# Button 發布事件
pub.sendMessage('clear_text')
# TextBox 訂閱
pub.subscribe(self.Clear, 'clear_text')

實現完全解耦,適合大型 GUI 架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved