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
,但之后应该重置。