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
ますが、後でリセットする必要があります。