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 に答える