5

考虑以下代码:

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)

另一方面,从 a或 aFoo继承的完全相同的代码可以正常工作。我可以通过在 Foo 类中实现我自己的方法来使 deepcopy 调用工作,但是有人可以指出我这里到底发生了什么吗?为什么继承自其他内置类时会失败,但继承自其他内置类时不会失败?listdict__deepcopy__deepcopy()Foodeque

4

1 回答 1

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)

不过,我不确定它是否能与您自定义该类的方式一起正常工作。

于 2013-11-08T05:01:13.313 回答