日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?...

發布時間:2024/1/23 python 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

是否建議它也適用于構造函數?我主要考慮Python及其__init __()方法,但這個問題適用于任何具有繼承的面向對象語言.

我問這個問題,因為有一個子類從一個或多個類繼承,提供一些不錯的默認行為(比如從Python繼承字典,以便obj [‘key’]適用于新的對象)類).但是,允許子類完全像字典一樣使用并不總是自然或簡單的:有時候構造函數參數只與特定用戶子類相關(例如,代表一組串行端口的類)更好可能希望表現得像端口[‘usb1’]是USB端口#1等字典.這種情況的推薦方法是什么?具有與其基類完全兼容的子類構造函數,并通過對象工廠函數生成實例,該函數采用簡單,用戶友好的參數?或者只是編寫一個類構造函數,其參數集不能直接賦予其基類的構造函數,但從用戶角度來看哪個更合乎邏輯?

PS:我誤解了上面的Liskov原則:下面的Sven的評論指出了一個子類的對象應該像超類的對象一樣的事實(子類本身不必像超類一樣;特別是,它們的構造函數沒有具有相同的參數[簽名]).

解決方法:

根據要求,我發布了以前作為評論的回答.

鏈接的維基百科文章中定義的原則是“如果S是T的子類型,那么類型T的對象可以用類型S的對象替換”.它不會讀取“子類應該以與其基類相同的方式運行”.在考慮構造函數時,差異很重要:維基百科版本僅討論子類型的對象,而不是類型本身.對于一個對象,已經調用了構造函數,因此該原則不適用于構造函數.這也是我應用它的方式,以及它在標準庫中的應用方式(例如defaultdict和dict).

多重繼承中的構造函數可能無法以語言無關的方式進行討論.在Python中,有兩種方法.如果您的繼承圖包含菱形圖案,并且您需要確保所有構造函數只被調用一次,則應使用super()并遵循Raymond Hettinger的文章Python’s super() considered super“實用建議”部分中描述的模式.如果您沒有鉆石(包括對象的鉆石除外),您還可以對所有基類構造函數使用顯式基類調用.

標簽:python,oop,constructor,liskov-substitution-principle

總結

以上是生活随笔為你收集整理的python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。