Я хочу выполнить метод с копией оригинала self
, переданной во время выполнения.
Вот код, о котором я говорю:
def protect_self(func):
from copy import copy
from functools import wraps
@wraps(func)
def decorated(self, *args, **kwargs):
self_copy = copy(self)
return func(self_copy, *args, **kwargs)
return decorated
В моем понимании функция копирования создает новый объект того же типа и
копирует __dict__
старого в новый объект (используя ссылки, так
изменения в реальных экземплярах объекта в __dict__
все равно будут влиять на исходный объект).
Означает ли это, что я могу быть уверен, что декорированный метод не может изменить __dict__
из
оригинальный экземпляр?
Просто чтобы убедиться: мне не нужно безопасное поведение в песочнице. Моя цель просто
чтобы создать экземпляр одного объекта, который я буду использовать как фабрику.
Защищенный метод должен иметь возможность изменить переданный self
, но он должен
быть сброшены впоследствии.