我可以将python ** kwargs从sub传递给父类吗?

时间:2013-01-15 01:01:24

标签: 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)

基本上,每个子类都需要正确实例化某些参数。它们是相同的参数。我只想一次检查这些参数。如果我可以从父 init ()完成此操作 - 那就更好了。

是否可以这样做?

2 个答案:

答案 0 :(得分: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进行任何修改,并且钻石继承的可能性稍微不大。< / p>

答案 1 :(得分:2)

绝对。参数和关键字扩展在输入参数和关键字参数时会自然地起作用。