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

如何在python中使用super调用deepcopy?,python,copy,super,Python,Copy,Super,我有两个类,我们称它们为Class1和Class2(Class1),Class2是从Class1派生的 在Class1中,copy.deepcopy工作得很好,我不想在Class1上实现一个方法 现在,我有一个实例i2=Class2(someParameters)。我想制作一个i2的深度副本,就像Class1的实例一样 我不能调用copy.deepcopy(i2),因为这会像在class2实例中一样进行deepcopy i2(在我的例子中存在签名问题) 我无法调用super()。deepcopy

我有两个类,我们称它们为Class1和Class2(Class1),Class2是从Class1派生的

在Class1中,copy.deepcopy工作得很好,我不想在Class1上实现一个方法

现在,我有一个实例i2=Class2(someParameters)。我想制作一个i2的深度副本,就像Class1的实例一样

我不能调用copy.deepcopy(i2),因为这会像在class2实例中一样进行deepcopy i2(在我的例子中存在签名问题)

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

然后如何继续调用内置的copy.deepcopy(i2),将i2视为Class1的实例

谢谢你的想法,劳伦特

编辑:如评论中所问,如果我简单地调用copy.deepcopy,那么这是一个显示签名问题的代码示例

import copy
from copy import deepcopy


class Class1(object):
    pass

class Class2(Class1):
    def __new__(cls,start):
        eClass1=Class1.__new__(cls)
        Class1.__init__(eClass1)
        eClass1.start=start
        return eClass1

instanceClass2=Class2(1)
copy.deepcopy(instanceClass2)
口译员的回答是:

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)
回溯(最近一次呼叫最后一次):
文件“essaidbug7.py”,第18行,在
copy.deepcopy(instanceClass2)
文件“/usr/lib/python2.7/copy.py”,第190行,在deepcopy中
y=_(x,rv,1,备忘录)
文件“/usr/lib/python2.7/copy.py”,第329行,在
y=可调用(*args)
文件“/usr/lib/python2.7/copy_reg.py”,第93行,在__
返回cls.\uuuu新建\uuuuu(cls,*args)
TypeError:\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

在Class1中创建
Class2的对象,而不是继承
Class1
,怎么样?比如:

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

# Then deepcopy
copy.deepcopy(class_2.class_1)

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

父类和子类没有相同的签名,子类中有更多的参数。因此,如果我尝试使用copy.deepcopy对父类进行deepcopy,就会启动一个递归过程。当这个递归在父级时,Python解释器会发出如下抱怨:TypeError:\uuuuu new\uuuuu()正好接受1个参数(2个给定参数)Moinuddin,您是对的,通过一个示例可以更清楚地看到这一点。刚刚加上去的。