2017-07-06 8 views
0

加入它,我有這樣一個類:通行證所需位置參數的超類沒有子類的構造函數

class C1: 

    def __init__(self, arg1, kwarg1=1, kwarg2=2): 
     ... 

現在我想創建一個C2,只是改變C1kwarg1kwarg2默認值。這是某種functools.partial,但類。

我能做到這樣說:

class C2(C1): 

    def __init__(self, arg1, kwarg1=3, kwarg2=4): 
     super().__init(arg1, kwarg1=kwarg1, kwarg2=kwarg2) 

但我不喜歡,我需要通過arg1C2構造函數,然後通過它,因爲它是C1super().__init(arg1, ...)

我想要做這樣的事情:

class C2(C1): 

    def __init__(self, kwarg1=3, kwarg2=4, *args, **kwargs): 
     super().__init(kwarg1=kwarg1, kwarg2=kwarg2, *args, **kwargs) 

但這不起作用:

​​3210

有什麼辦法,我可以從C2通過arg1C1不提它在C2的構造函數

+0

對於'C2'的所有實例,'arg1'是否相同? –

回答

1

你可以用更加複雜的方式做到這一點,但至少你不會b Ë經過可怕的arg1

class C2(C1): 

    def __init__(self, *args, **kwargs): 
     kwargs["kwarg1"] = kwargs.get("kwarg1", 3) 
     kwargs["kwarg2"] = kwargs.get("kwarg2", 4) 
     super().__init__(*args, **kwargs) 

但你仍然需要初始化C2時保持位置參數。

相關問題