__deepcopy__和__init__中更改参数的继承

时间:2012-11-29 09:13:17

标签: python inheritance deep-copy

从基类继承,实现__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
        ...

1 个答案:

答案 0 :(得分:1)

你可以通过接受任意数量的参数来解决这个问题,在你自己的构造函数中忽略它们:

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

由于无论如何都使用A.__init__()作为第二个位置参数调用None,因此当__deepcopy__再次将其传递回实例初始值设定项时,可以安全地忽略该相同的参数。