如何在python中使用super调用deepcopy?

时间:2016-08-29 21:23:56

标签: python copy super

我有2个类,我们称它们为Class1和Class2(Class1),Class2派生自Class1。

在Class1中,copy.deepcopy运行良好,我想要在Class1上实现 deepcopy 方法。

现在,我有一个实例i2 = Class2(someParameters)。我想像在Class1中一样对i2进行深度复制。

我无法调用copy.deepcopy(i2),因为这会像在class2的实例中那样深入复制i2(在我的情况下会出现签名问题)。

我无法调用super()。 deepcopy (i2),因为在class1中找不到 deepcopy ,而且会回到copy.deepcopy(i2)的计算作为class2的一个实例,我们进入一个无限循环。

如何继续调用内置的copy.deepcopy(i2),将i2作为Class1的一个实例?

感谢您的想法,Laurent。

编辑:正如评论中所提到的,如果我只是调用copy.deepcopy,则显示签名问题的代码示例

Traceback (most recent call last):
  File "essaiDebug7.py", line 18, in <module>
    copy.deepcopy(instanceClass2)
  File "/usr/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/usr/lib/python2.7/copy.py", line 329, in _reconstruct
    y = callable(*args)
  File "/usr/lib/python2.7/copy_reg.py", line 93, in __newobj__
    return cls.__new__(cls, *args)
TypeError: __new__() takes exactly 2 arguments (1 given)

口译员的回答:

{{1}}

1 个答案:

答案 0 :(得分:0)

如何创建Class1的对象,而不是继承Class2 in Class1?像:

class Class2(object):
    def __init__(self):
        self.class_1 = Class1()

# Then deepcopy
copy.deepcopy(class_2.class_1)

注意:如果您可以分享真实场景,那就太棒了。因为,根据您提到的问题,我不认为您的类是可继承的。如果是,我不明白为什么你只想复制父类?