Хорошо ... Это может быть глупый вопрос ... но я не могу найти ответ прямо сейчас!
Мне нужно реализовать копию объекта, для которого я хочу скопировать все атрибуты, кроме одного или двух, для которых я хочу полностью контролировать копию.
Вот стандартное поведение копирования для объекта:
>>> class test(object):
... def __init__(self, arg):
... self._a = arg
...
>>> t = test(123999)
>>> t._a
123999
>>> tc = copy.copy(t)
>>> tc._a
123999
Что в основном означает, что все атрибуты скопированы. Что я хотел бы сделать, это повторно использовать это поведение следующим образом:
>>> class test(object):
... def __init__(self, arga, argb):
... self._a = arga
... self._b = argb
...
... def __copy__(self):
... obj_copy = copy.copy(self) #NOT POSSIBLE OF COURSE => infinite recursion
... obj_copy._b = my_operation(obj_copy._b)
... return obj_copy
Надеюсь, вы поняли: я хочу повторно использовать поведение копирования объектов, но подключить свои собственные операции. Есть ли чистый способ сделать это (без необходимости for attr_name in dir(self): ...
) ???