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)

由于无论如何您都将A.__init__()with作为第二个位置参数调用,因此在再次将其传递回实例初始化程序None时忽略相同的参数是安全的。__deepcopy__

于 2012-11-29T09:16:35.777 回答