请考虑以下代码:
from collections import deque
import copy
class Foo(deque):
def __init__(self):
super(Foo, self).__init__()
foo = Foo()
foo_copy = copy.deepcopy(foo)
此处,deepcopy(foo)
失败并显示以下消息:
TypeError: __init__() takes exactly 1 argument (3 given)
另一方面,继承自Foo
或list
的{{1}}完全相同的代码也可以。我可以通过在Foo类中实现我自己的dict
方法来使deepcopy调用工作,但是有人可以指点我解释这里究竟发生了什么吗?为什么__deepcopy__
在继承自deepcopy()
的{{1}}上失败但在从其他内置类继承时没有失败?
答案 0 :(得分:0)
老实说,我使用的最简单的方法是支持父构造函数的传递参数。
from collections import deque
import copy
class Foo(deque):
def __init__(self, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
foo = Foo()
foo_copy = copy.deepcopy(foo)
但是,我不确定它是否能够正确地定制该类。