10

我想做这样的事情:

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 () 中做到这一点 - 那就更好了。

是否有可能做到这一点?

4

2 回答 2

11

当然。这不是一个不常见的模式:

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)

这也使您免受恶作剧的影响:现在superargspecA可以更改而无需对 进行任何编辑B,并且钻石继承不太可能中断。

于 2013-01-15T01:14:15.340 回答
2

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

于 2013-01-15T01:05:22.113 回答