Я реализую класс python, который предоставляет некоторую вложенную структуру данных. Я хочу добавить поддержку для копирования через copy.copy() и глубокое копирование через copy.deepcopy(), которое, как описывают docs для модуля копирования, включает в себя специальные методы __copy__() и __deepcopy__.
Я знаю, как научить мой класс делать копию самого себя, но я хочу, чтобы не пройти через __init__() в новом экземпляре, так как __init__() выполняет некоторые действия, которые моя копирующая логика не хочет (или не нуждается) сделать.
в чем я оказался, это этот метод, который работает по назначению:
def __copy__(self):
cls = type(self)
obj = cls.__new__(cls)
# custom copying logic that populates obj goes here
return obj
мой вопрос: вызывает cls.__new__(cls) правильный подход для реализации __copy__(), который хочет пропустить __init__() для копии? или есть ли более "питонический" подход, который я упускал из виду?