[英]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.