У меня есть 2 класса, назовем их Class1 и Class2 (Class1), а Class2 - из класса 1.Как вызвать deepcopy с супер в python?
В Class1, copy.deepcopy работает очень хорошо, и я не хотите реализовать метод DeepCopy на Class1.
Теперь у меня есть экземпляр i2 = Class2 (someParameters). Я хочу сделать глубокую копию i2, как, например, в Class1.
Я не могу вызвать copy.deepcopy (i2), потому что это будет deepcopy i2, как в случае класса2 (с проблемами подписи в моем случае).
Я не могу назвать super(). deepcopy (i2) потому что deepcopy не найден в классе1, и один возвращается к вычислению copy.deepcopy (i2) как экземпляр класса2, и мы переходим к бесконечному циклу.
Как продолжить, чтобы вызвать встроенную копию.deepcopy (i2), касающуюся i2 в качестве экземпляра Class1?
Благодарим вас за идеи, Лоран.
EDIT: Как спросил в комментариях, пример кода, чтобы показать проблему подписи, если я просто называю 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)
Родительский класс и дочерний класс не имеют одинаковой сигнатуры, в дочернем классе имеется больше параметров. Таким образом, если я пытаюсь выполнить глубокую копию родительского класса с помощью copy.deepcopy, начинается рекурсивная процедура. Когда эта рекурсия находится на уровне родителя, интерпретатор Python жалуется, как: TypeError: __new __() принимает ровно 1 аргумент (2 задано) –
Moinuddin, вы правы, это более понятно с примера. Просто добавил. –