私はPyContract ( PyContractsではありません) を使用して、クラス メソッドのいくつかの制約を作成する作業を行っています。id(myObj)
事後条件として、一部のオブジェクトのメモリ アドレスが変更されていないこと、つまり、関数の呼び出しの前後で同じであることを確認したいと思います。PyContract でこれを行うにはどうすればよいですか?
これが私が今していることです:
def foo(param1, param2)
"""
# some other constraints
post[param1, param2]:
__old__.param1 is param1
__old__.param2 is param2
"""
ただし、その事後条件は失敗します。__old__.param1
これは、が is と同じメモリ位置に格納されていないためだとしか思えませんparam1
。これは理にかなっています。なぜなら、PyContractは実行後の値と比較してその値をチェックするために、実行param1
前のコピーを作成する必要があるからです。foo
param1
foo
上記の分析が正しいと仮定すると、id(__old__.param1)
が と異なる理由を説明するだけid(param1)
です。id(param1)
ただし、の副作用として変更されないようにする方法については、まだ回答がありませんfoo
。PyContract でこれを確認するにはどうすればよいですか?