を使用せずに__get__経由__iadd__呼び出すときに、私は次の動作に出くわし両方のケースが同じように動作することを期待してください。さらに、参照カウントとオブジェクトの存続期間についての私の理解から、私はどちらの場合でもオブジェクトを解放する必要があると確信していました。メモリリークが<code>weakref</code>を使用するデコレータ<em>ない</em>を変更しようとして一時的
私はpython2.7とpython3.3の両方でテストしました。
これはバグですか、意図的な動作ですか? 両方の呼び出しで期待される結果が得られる(問題のオブジェクトを解放する)方法はありますか?
私はこれがバウンドメソッドの正しいオブジェクトの有効期間のセマンティクスを破壊するためproxy
でweakref
を使用したくない:
a = A()
descr = a.descr
del a # a is kept alive since descr is a bound method to a
descr() # should execute a.descr() as expected
実際、 'is_leaky'に' gc.collect() 'を追加すると循環参照が壊れ、' is_leaky(test2) 'がFalseを返します。 – unutbu
はい、test2をa.descr .__ iadd __(object())に変更すると2番目のFalseになります。 – BartoszKP
WOW。これは微妙です。ディスクリプタにNOP '__set__'を追加すると、問題が修正されます。どうもありがとうございました! – coldfix