从基类继承,实现__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
...
答案 0 :(得分:1)
你可以通过接受任意数量的参数来解决这个问题,在你自己的构造函数中忽略它们:
class B(A):
def __init__(self, arg1, *ignored):
# `ignored` is.. ignored
A.__init__(self, arg1, None)
由于无论如何都使用A.__init__()
作为第二个位置参数调用None
,因此当__deepcopy__
再次将其传递回实例初始值设定项时,可以安全地忽略该相同的参数。