Я реализую класс 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__()
для копии? или есть ли более "питонический" подход, который я упускал из виду?