2017-07-06 19 views
0

サブクラスでそれを追加することなく、スーパークラスに位置引数を必要としていました。それは、ある種のfunctools.partialですが、クラスのためです。パスは、私は、このようなクラスを持つコンストラクタ

私はそれをこのようにそれを行うことができます。

class C2(C1): 

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

をしかし、私はarg1C2にコンストラクタを渡す必要があることを好み、それがsuper().__init(arg1, ...)C1にあるとして、それを渡すことはありません。

私はこのような何かしたいと思います:

class C2(C1): 

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

をしかし、これは動作しません:

​​3210

は、私はそれを言及せずC2からC1arg1を渡すことができる方法はありますC2のコンストラクタ

+0

'arg1'は' C2'のすべてのインスタンスで同じですか? –

答えて

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を初期化するとき、あなたの位置引数を維持する必要があります。

関連する問題