簡體   English   中英

如何在Python中實現“參數對象”重構?

[英]How do I implement 'Parameter Object' refactor in Python?

現在我像這樣繼承參數對象的類

class A():
    def __init__(self,p1,p2):
        self.p1, self.p2 = p1, p2

class B(A):
    def __init__(self,b):
        self.p1, self.p2 = b.p1, b.p2

這減少了使用代碼的荒謬性,但不包括類代碼本身。 所以,我想做C ++的事情,並將參數對象傳遞給初始化列表,就像這樣

class A { 
    int p1,p2; 
}
class B : public A { 
    B(const A& a) : A(a) {} 
}

我可以用Python做到這一點嗎? 具體來說,我可以通過某種方式在子項中調用它的__init__來設置父類的屬性嗎? - 從閱讀“潛入Python”我猜我可以這樣做,因為對象已經被__init__調用時構造。

或者,也許是有一些不同的方法在Python中實現參數對象重構 (我只是試圖強制使用C ++技術)?

一般來說,您可能不需要參數對象重構技術。 Python在標准庫中有幾個集合,它們已經具有參數對象重構所提供的核心優勢。

此外,像參數對象設計模式這樣的重構的成本/收益分析與C ++明顯不同。 例如,如果沒有靜態編譯,對象創建和成員查找會更加昂貴。 參數對象模式的基本情況是為相關字段提供命名空間,這可以通過Python在字典中完成。

如果您需要以與分組數據相關的方法形式進行某種模型操作,那么該模式在Python中具有更多價值,但即便如此,像“屬性”這樣簡單且廉價的機制也可以解決成員屬性的操作需求。

通過對問題空間稍微詳細的描述,我們可以幫助評估這種重構是否有益,但在使用Python時,最好不要使用該設計模式。

將C ++代碼轉換為python將是這樣的:

class A():
    def __init__(self,p1,p2):
        self.p1, self.p2 = p1, p2

class B(A):
    def __init__(self,b):
        A.__init__(self, b.p1, b.p2)
class B(A):
    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)

閱讀更多關於super()的詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM