我需要來自第三方模塊m的類X的某些功能。我可以直接使用m.X,但我可能需要將m.X替換爲未來的另一個類n.Y(例如,如果我發現更好的實現)。python:圍繞第三方類寫封裝
我想避免在這種情況下更改其他代碼。
現在,我希望m.X的完整接口(包括初始化)通過不變。我寫了一包裹材料W的m.X如下:
class W(m.X):
def __init__(self, *args):
super().__init__(*args)
今後,如有需要,我打算重寫上面爲:
class W(n.Y):
def __init__(self, *args):
super().__init__(*args)
# override instance methods of n.Y that don't share the semantics with m.X
# for example, in case f1 is hard to replicate in n.Y:
# def f1(self, *args):
# print("this method is no longer available")
# raise MyDeprecatedMethod()
# for example, in case f2 needs to be recalculated
# def f2(self, *args):
# do the calculations required to keep W.f2 unchanged
是我目前的包裝器m.X接受嗎?它是否有問題,或與n.Y的計劃包裝?
看起來不錯(至少,這是我的方式) – 2011-01-19 01:57:59
你真的需要多少包裝?如果唯一的問題是屏蔽代碼的其他命名,那麼只需`W = m.X`就足夠了,不是嗎? – 2011-01-19 04:38:40