Python deepcopy在deque的子类上失败
考虑以下代码:Python deepcopy在deque的子类上失败,python,Python,考虑以下代码: 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:\uuuu init\uuuuuu()正好接受1个参数(给定3个) 另一方面,从
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:\uuuu init\uuuuuu()正好接受1个参数(给定3个)
另一方面,从
列表
或dict
继承的Foo
完全相同的代码可以正常工作。我可以通过在Foo类中实现我自己的\uuuu deepcopy\uuuu
方法来实现deepcopy调用,但是有人能告诉我这里到底发生了什么吗?为什么deepcopy()
在继承自deque
的Foo
上失败,但在继承自其他内置类时没有失败?老实说,我将使用的最简单方法是支持传递参数到父构造函数
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)
不过,我不确定它是否能与您自定义该类的方式一起正常工作。OP中的代码只是一个简单的示例,我确实在调用
super()时指定了参数。
。所以你的例子是可行的,但它并不完全符合我的需要。另外,我在这里想要的是对正在发生的事情的解释;我已经知道如何让这项工作为我所用(通过实现\uuu deepcopy\uuuu()
)。