<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      Python OOP 設計思想 10:組合優先于繼承

      0
      分享至

      在 Python 中,繼承并非類型建模的核心手段。多態來源于調用點,接口產生于使用方式,而對象之間的可替換性取決于行為一致性,而非形式上的繼承關系。因此,在實踐層面,當需要擴展能力、組織復雜行為或應對需求變化時,組合應當優先于繼承。這并非一句設計口號,而是 Python 對象模型、協議機制與動態行為綁定方式自然導出的結論。

      10.1 組合的基本思想

      組合(Composition) 的思想非常樸素:不要通過“成為某種類型”來獲得能力,而是通過“擁有某種對象”來獲得能力。

      (1)繼承方式:通過 is-a 關系獲得能力

      car.move()  # 通過繼承獲得 move 能力

      在繼承方案中,Car 通過成為 Vehicle 的子類獲得 move() 行為,其能力來源與類型身份被強綁定。一旦繼承關系成立,Car 便不可避免地承載 Vehicle 的全部語義。

      (2)組合方式:通過 has-a 關系獲得能力

      car2.start()    # Engine started

      而在組合方案中,Car2 并未聲明自己“是某種類型”,而是通過持有 Engine 對象獲得啟動能力。能力的來源是對象協作關系,而非類型歸屬關系。

      這正是組合的核心思想:對象通過“擁有誰”來獲得能力,而不是通過“成為誰”來獲得能力。能力是可配置的,而身份不再被固化。

      10.2 行為組合而非類型擴展

      繼承的一個根本問題在于:它擴展的是“類型整體”,而非“具體所需行為”。

      (1)繼承的問題:無關能力被一并繼承

              

      UserService 只關心數據庫連接能力,卻被迫繼承了 backup() 這一與其職責無關的行為。這并非代碼錯誤,而是類型繼承天然放大的語義耦合。

      上述示例揭示了繼承在復雜系統中的一個根本問題:繼承擴展的是“父類的整體語義”,而非子類真正需要的那一部分行為。

      (2)使用組合,可以只獲取真正需要的行為

      service.get_user(123)

      組合方案中,UserService2 僅依賴 get_connection() 這一最小行為協議。它并不關心連接來自連接池、直連數據庫,還是其他來源。

      這表明,組合關注“行為拼裝”,繼承則綁定“語義整體”。前者更符合 Python 的協議與使用導向設計。

      10.3 委托模式的自然表達

      在 Python 語境中,“委托”并不是一種需要刻意實現的設計模式,而是一種對象協作關系的自然結果。

      所謂委托(Delegation),是指一個對象并不自行完成某項職責,而是將該職責轉交給其持有的另一個對象,并由后者完成具體工作。調用方只與“委托者”交互,而實際行為由“被委托者”承擔。

      與繼承不同,委托并不建立類型層級,也不形成身份綁定。它只表達一種運行期的職責分工關系:誰負責協調,誰負責執行。這使得行為可以被自由替換,而對象身份保持穩定。

      processor.process("test")

      DataProcessor 不自己實現難邏輯,而是接收一個 validator 對象并將校驗職責委托給它。只要該對象提供 validate() 行為,就可以參與協作。

      關鍵不在于 SimpleValidator 是否繼承自某個基類,而在于它是否履行了被委托的職責。

      這種設計使得:

      ? 職責劃分清晰

      ? 校驗策略可在運行期替換

      ? 新行為無需修改既有類型層級

      委托在這里不是“應用某種模式”,而是組合思想在 Python 對象模型中的自然體現。

      10.4 組合帶來的演化自由

      組合最大的價值,往往并不體現在初始設計,而體現在系統的演化階段。

      )).run()

      Application 并不關心日志的具體實現細節,只依賴 log() 行為協議。日志能力既可以來自單一對象,也可以來自多個對象的組合。

      當需求從“只打印”演化為“同時打印并寫文件”時,繼承方案往往需要引入新的子類或調整層級,而組合方案只需重新拼裝已有組件。

      這正是 Python 倡導的設計方向:穩定的是接口與使用方式,可變的是實現與組合結構。

      10.5 組合與測試友好性

      組合能夠顯著提升可測試性,其關鍵原因在于它天然支持“依賴注入”。

      所謂依賴注入(Dependency Injection),并不是指某種框架或技術,而是一種構造方式上的選擇:對象不自行創建其依賴,而是通過構造參數、屬性或方法參數接收外部提供的依賴對象。

      這種方式將“對象的行為邏輯”與“依賴的獲取方式”解耦,使得依賴可以在不同環境下被自由替換,尤其適合測試、模擬與運行期配置。

              

              

              return {"status": "success", "amount": amount}

          

      OrderService 通過初始化函數接收 payment_gateway,使其核心邏輯與外部依賴完全解耦。

      ? 依賴注入:將對象的依賴通過參數傳遞,而不是在對象內部創建

      ? 控制反轉:控制權從 OrderService 轉移到外部調用者

      ? 依賴倒置:依賴抽象(charge 方法接口),不依賴具體實現

      測試時,可以輕松注入一個行為可控、狀態可觀察的模擬對象。

          print(f"   結果: {flexible_service.place_order(300)}")

      這種設計避免了:

      ? 復雜的繼承測試替身

      ? 隱式的全局依賴

      ? 對真實外部系統的調用

      組合使測試關注點回歸業務行為本身,而不是被迫處理類型結構。這也是 Python 項目中普遍采用依賴注入與組合的重要原因。

      10.6 組合與策略模式

      當系統中存在可變行為需要在運行期進行切換或替換時,組合比繼承更具穩定性與表達力。所謂“策略模式”(Strategy Pattern),本質上正是組合思想在行為層面的一種具體體現。

      在 Python 中,策略并不等同于固定的類層級或抽象接口結構。它強調的是:將可變算法獨立封裝為對象,并通過組合在運行期注入或替換。調用方只依賴穩定的行為協議,而不關心具體策略的類型身份。

      因此,策略模式并非組合之外的另一種設計技巧,而是組合在“可變行為”這一問題域中的自然落點。策略對象可以是任意提供所需行為的對象,是否繼承自統一父類并不關鍵。

      下面的示例將展示:策略模式在 Python 中往往通過組合與委托自然形成,而非通過復雜的繼承結構刻意實現。

      archiver.archive("data")   # 輸出:"GZIP compressed: data"

      策略是否繼承自同一父類并不重要,重要的是調用點依賴的行為是否一致。

      DataArchiver 只依賴 compress() 行為協議,因此壓縮策略可以在運行期自由替換。這種替換并不會改變 DataArchiver 的身份或結構。

      策略模式的優勢在此體現為:

      ? 算法可互換:同一操作(archive)使用不同算法(ZIP/GZIP)

      ? 運行時靈活性:無需重新創建對象即可改變行為

      ? 客戶端透明:archive() 調用方式不變,但內部算法已改變

      很顯然,策略模式并非以繼承為中心,而是以行為協議為中心。

      這再次表明:在 Python 中,組合與協議天然協同,而繼承只是可選工具。

      小結

      在 Python 中,能力的獲得不應依賴類型身份,而應來源于對象協作。組合通過行為拼裝而非類型擴展,使對象關系保持松耦合、可替換且易演化。委托、策略與依賴注入并非刻意設計的模式,而是組合思想在 Python 對象模型中的自然結果。將繼承限制為少數穩定擴展點,并優先采用組合,是 Python 面向對象設計保持靈活性與可維護性的根本原因。


      點贊有美意,贊賞是鼓勵

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      太離譜,閑魚驚現 iPhone 18 Pro 工程機

      太離譜,閑魚驚現 iPhone 18 Pro 工程機

      花果科技
      2026-01-12 12:46:04
      全世界最狠的騙局,莫過于貸款買房。

      全世界最狠的騙局,莫過于貸款買房。

      流蘇晚晴
      2026-01-08 18:18:57
      俄軍怒火被徹底點燃,連夜裝填核彈,美終于怕了,威脅歐盟快收手

      俄軍怒火被徹底點燃,連夜裝填核彈,美終于怕了,威脅歐盟快收手

      妙知
      2026-01-12 13:32:43
      TOP14位身高170以上的女神,有顏有燈有演技

      TOP14位身高170以上的女神,有顏有燈有演技

      素然追光
      2026-01-02 02:45:02
      醫生發現:天冷堅持戴帽子的人,過不了幾個月,身體會有5大變化

      醫生發現:天冷堅持戴帽子的人,過不了幾個月,身體會有5大變化

      健康之光
      2026-01-12 11:50:08
      他上賽季還在保級隊效力,如今卻在冬訓迎來逆襲,轉會蓉城踢首發

      他上賽季還在保級隊效力,如今卻在冬訓迎來逆襲,轉會蓉城踢首發

      振剛說足球
      2026-01-12 13:46:01
      大清朝第一罪人,不是鰲拜,也不是吳三桂,而是當了35年忠臣的他

      大清朝第一罪人,不是鰲拜,也不是吳三桂,而是當了35年忠臣的他

      豐譚筆錄
      2026-01-12 07:50:12
      周一官宣新帥!曼聯高層拍板,索肖恐無緣回歸,黑馬脫穎而出

      周一官宣新帥!曼聯高層拍板,索肖恐無緣回歸,黑馬脫穎而出

      阿泰希特
      2026-01-12 10:02:14
      本周,青島開啟升溫模式,直沖13℃!接下來將迎雨雪天氣→

      本周,青島開啟升溫模式,直沖13℃!接下來將迎雨雪天氣→

      魯中晨報
      2026-01-12 07:17:07
      世體:國米只需付出1500萬歐,馬競便可以放莫利納離隊

      世體:國米只需付出1500萬歐,馬競便可以放莫利納離隊

      懂球帝
      2026-01-12 13:21:07
      中方下“逐客令”,直言:一粒大米也不要,直接叫停900萬噸訂單

      中方下“逐客令”,直言:一粒大米也不要,直接叫停900萬噸訂單

      愛吃醋的貓咪
      2025-12-27 16:24:13
      40歲保姆:拿著雇主的高工資提供特殊服務,老公得知后和我離婚了

      40歲保姆:拿著雇主的高工資提供特殊服務,老公得知后和我離婚了

      孢木情感
      2026-01-11 19:12:55
      歷經十幾年談判,5個縣都劃歸鄰國,如今現狀如何了?

      歷經十幾年談判,5個縣都劃歸鄰國,如今現狀如何了?

      鶴羽說個事
      2026-01-09 14:29:53
      南海撞機王偉成功跳傘,咋10萬人都找不到他?直到20多年后才明白

      南海撞機王偉成功跳傘,咋10萬人都找不到他?直到20多年后才明白

      鶴羽說個事
      2025-12-12 14:31:49
      離譜!美商務部長:臺積電必須雇傭跨性別、女同工程師!否則違規!

      離譜!美商務部長:臺積電必須雇傭跨性別、女同工程師!否則違規!

      EETOP半導體社區
      2026-01-12 11:38:27
      患者憤怒發聲:醫生準時下班,等待無果引熱議!醫保局力推減少排隊等候

      患者憤怒發聲:醫生準時下班,等待無果引熱議!醫保局力推減少排隊等候

      寶哥精彩賽事
      2026-01-12 08:25:18
      瑞銀分析師:2030年中國電動汽車或獨占全球市場三分之一份額

      瑞銀分析師:2030年中國電動汽車或獨占全球市場三分之一份額

      IT之家
      2026-01-12 11:13:09
      閆學晶“哭窮”后多平臺賬號禁止關注 其代言調料品牌老總:將向她索賠 不再請明星代言

      閆學晶“哭窮”后多平臺賬號禁止關注 其代言調料品牌老總:將向她索賠 不再請明星代言

      紅星新聞
      2026-01-10 14:19:18
      這個手握全球代碼精華的社區,自殺了。

      這個手握全球代碼精華的社區,自殺了。

      差評XPIN
      2026-01-12 00:08:23
      曝某頭部新勢力將關店、裁員!

      曝某頭部新勢力將關店、裁員!

      電動知家
      2026-01-11 13:59:09
      2026-01-12 14:16:49
      MediaTea
      MediaTea
      專業的數字媒體、新媒體技術
      1701文章數 72關注度
      往期回顧 全部

      科技要聞

      小米二手車價大跳水:SU7半年跌5萬元

      頭條要聞

      臺媒:大陸在朱日和基地復制"總統府" 不可掉以輕心

      頭條要聞

      臺媒:大陸在朱日和基地復制"總統府" 不可掉以輕心

      體育要聞

      聰明的球員,不是教練教出來的

      娛樂要聞

      閆學晶:脫離群眾太久 忘了自己的根

      財經要聞

      揭秘“穩賺不賠”的代工項目騙局

      汽車要聞

      增配不加價 北京現代 第五代 勝達2026款上市

      態度原創

      時尚
      房產
      旅游
      手機
      軍事航空

      普通人就該照搬這些穿搭!衣服不用買太貴,自然耐看又舒適

      房產要聞

      國家海岸 有鳳來儀|全維實景示范區首映海棠

      旅游要聞

      哈爾濱“鉆石海”浪漫賞落日

      手機要聞

      消息稱泡泡瑪特本月推“潮玩手機”,或與“年輕化主流品牌”合作

      軍事要聞

      俄大使:馬杜羅夫婦被控制時身邊沒人

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产国产乱老熟女视频网站97| 亚洲综合精品第一页| 神马午夜久久精品人妻| 熟女人妇 成熟妇女系列视频| 日本99视频| 伊人色影院| 台湾色综合| 99这里有精品视频| 暖暖 免费 高清 日本 在线观看5| 特黄A级毛片免费视频| 少妇高潮尖叫黑人激情在线| 国产午夜福利片无码视频| 九九国产在线| 波多野结衣中文字幕一区二区三区| 精品午夜福利短视频一区| 麻豆一区二区中文字幕| 日韩av高清无码| 四虎影视无码永久免费| 久草国产视频| 亚洲自拍成人| 电影久久久久久| 麻豆人妻| 成年女人午夜毛片免费视频| 91爱爱网| 国产精品久久久久av福利动漫| 欧美3p视频在线观看| 一本久道久久综合无码中文| 国产亚洲精品??码| 久久久久人妻精品区一三寸| 亚洲国产成人AⅤ片在线观看| 亚洲熟妇中文字幕五十中出| 无尺码精品产品日韩| 亚洲精品在线视频自拍| 精品乱码一区内射人妻无码| 91九色TS另类国产人妖| aa性欧美老妇人牲交免费| 色二区| 国产内射一级一片内射高清视频| 中文字幕免费不卡二区| 亚洲欧洲自拍拍偷精品网314| 日韩一区二区三区三级|