2

を実装__deepcopy__し、継承クラスがの引数を変更する基本クラスから継承する場合、基本クラスからのを継承クラスで再利用するに__init__はどうすれば__deepcopy__よいですか?

ここに例があります:

class A(object):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    def __deepcopy__(self, memo):
        newone = type(self)(self.arg1, self.arg2)
        ...

class B(A):
    def __init__(self, arg1):
        A.__init__(self, arg1, None)

    def __deepcopy__(self, memo):
        newone = A.__deepcopy__(self, memo) # fails, because __deepcopy__ of
                                            # A tries to create an instance of
                                            # B with to many arguments
        ...
4

1 に答える 1

1

独自のコンストラクターでそれらを無視して、任意の数の引数を受け入れることで、これを回避できます。

class B(A):
    def __init__(self, arg1, *ignored):
        # `ignored` is.. ignored
        A.__init__(self, arg1, None)

とにかく2番目の位置引数としてA.__init__()withを呼び出すので、インスタンス初期化子に再度渡すときに同じ引数を無視しても安全です。None__deepcopy__

于 2012-11-29T09:16:35.777 に答える