2013-01-15 172 views
4

我想要做這樣的事情:我可以將python ** kwargs從子類傳遞給父類嗎?

class A(object): 
    def __init__(self, **kwargs): 
     """ 
     return exception if certain arguments not set 
     """ 

class B(A): 
    def __init__(self, **kwargs): 
     super(B, self).__init__(**kwargs) 

基本上,每個子類都需要一定的參數進行正確實例。它們全都是相同的參數。我只想做一次這些參數的檢查。如果我可以從父母初始() - 這樣做更好。

可以做到這一點嗎?

+1

你試過了嗎? – phant0m

回答

6

當然。這是不是一種罕見的模式:

class A(object): 
    def __init__(self, foo, bar=3): 
     self.foo = foo 
     self.bar = bar 

class B(A): 
    def __init__(self, quux=6, **kwargs): 
     super(B, self).__init__(**kwargs) 

     self.quux = quux 

B(foo=1, quux=4) 

這也隔離您從super shenanigans一點:現在A的argspec可以改變,而不需要任何修改B,和鑽石繼承是有點不太可能打破。

+0

請注意,您可以用'A(1,3)'實例化一個'A'對象,但是您不能用'B(1,3)'或者甚至'B(1,3,4)''實例化一個'B'對象' –

2

絕對如此。參數和關鍵字擴展將自然適用於參數和關鍵字參數。

相關問題