Issue 1417: Weakref not working properly (original) (raw)

Created on 2007-11-10 12:20 by MHOOO, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
test2.py MHOOO,2007-11-10 12:20
myhacks.py MHOOO,2007-11-11 19:18
methodref.py ggenellina,2007-11-14 03:45
Messages (7)
msg57348 - (view) Author: (MHOOO) Date: 2007-11-10 12:20
The following code is not working as expected: import weakref class cls1: def giveTo( self, to ): to.take( self.bla ) def bla(self ): pass class cls2: def take( self, what ): self.ref = weakref.ref(what) c1 = cls1() c2 = cls2() c1.giveTo( c2 ) print c1.bla print c2.ref It prints out: <bound method cls1.bla of <__main__.cls1 instance at 0x00CA9E18>> <weakref at 00CAF180; dead> Why is the weakref pointing to a dead object, when it's still alive?
msg57353 - (view) Author: Paul Pogonyshev (_doublep) Date: 2007-11-10 15:43
Because self.bla is a bound-method object, which is created and then instantly deleted as unreferenced. This is not a bug, it is expected. >>> class X: ... def foo (self): pass ... >>> x = X () >>> x.foo is x.foo False Note how the objects are different.
msg57355 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2007-11-10 17:44
Closing as invalid.
msg57362 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2007-11-10 22:38
It's easier to see what is going on if you print the object ids. The id of self.bla is different than the subsequent c1.bla. The first is freed before the second gets created.
msg57375 - (view) Author: (MHOOO) Date: 2007-11-11 19:18
Well, too bad. My workaround (to make weakrefs work) is attached as a file.
msg57481 - (view) Author: Gabriel Genellina (ggenellina) Date: 2007-11-14 03:45
I think this methodref function is simpler and much less intrusive
msg57562 - (view) Author: (MHOOO) Date: 2007-11-15 21:21
Yeah, cool :) Thanks =)
History
Date User Action Args
2022-04-11 14:56:28 admin set github: 45758
2007-11-15 21:21:12 MHOOO set messages: +
2007-11-14 03:45:21 ggenellina set files: + methodref.pynosy: + ggenellinamessages: +
2007-11-11 19🔞18 MHOOO set files: + myhacks.pymessages: +
2007-11-10 22:38:39 rhettinger set nosy: + rhettingermessages: +
2007-11-10 17:44:34 georg.brandl set status: open -> closedresolution: not a bugmessages: + nosy: + georg.brandl
2007-11-10 15:43:15 _doublep set nosy: + _doublepmessages: +
2007-11-10 12:20:51 MHOOO create