kullanmadan __get__ yoluyla __iadd__ çağrılırken, aşağıdaki davranış tökezledi Her iki vakanın da aynı davranmasını bekliyoruz. Dahası, referans sayımı ve nesne yaşamı anlayışımdan, her iki durumda da nesnenin serbest bırakılması gerektiğine ikna oldum.Bellek sızıntısı bir <code>weakref</code> kullanmak için bir dekoratör <em>değil</em> değiştirmek çalışırken geçici
Her ikisini de python2.7 ve python3.3'te test ettim.
Bu bir hata veya kasıtlı davranış mı? Her iki çağrının da beklenen sonuçlara sahip olması için bir yol var mı (söz konusu nesnenin serbest olması)? Bu ciltli yöntemleri için doğru nesne ömür boyu semantiğini yok eder çünkü
Ben proxy
bir weakref
kullanmak istemiyorsanız:
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
Gerçekten de, 'gc.collect()' ifadesini 'is_leaky' öğesine eklemek döngüsel referansı kırıyor ve' get_leaky (test2) 'işlevinin False değerini döndürmesine neden oluyor. – unutbu
Evet, test2'nin a.descr .__ iadd __ (object()) olması için değiştirilmesi, ikinci bir False ile sonuçlanır. – BartoszKP
WOW. Bu ince. Diskeçöre NOP '__set__' eklemek problemi düzeltir. Çok teşekkür ederim! – coldfix