V
Vincent van Beveren
Hi everyone,
I was working with weak references in Python, and noticed that it was impossible to create a weak-reference of bound methods. Here is a little python 3.0 program to prove my point:
import weakref
print("Creating object...")
class A(object):
def b(self):
print("I am still here")
a = A()
def d(r):
print("Aaah! Weakref lost ref")
print("Creating weak reference")
r = weakref.ref(a.b, d)
print("Oh, wait, its already gone!")
print("Ref == None, cause of untimely demise: %s" % r())
print("Object is still alive: %s" % a)
print("Function is still exists: %s" % a.b)
print("See:")
a.b()
I also tried this in Python 2.5 and 2.6 (with minor modifications to the syntax of course), and it yielded the exact same behavior. Why is this, and is there anything I can do about it? I wish to reference these bound functions, but I do not want to keep them in memory once the object they belong to is no longer referenced.
Regards,
Vincent van Beveren
___
Ing. V. van Beveren
Software Engineer, FOM Rijnhuizen
E: (e-mail address removed)
I was working with weak references in Python, and noticed that it was impossible to create a weak-reference of bound methods. Here is a little python 3.0 program to prove my point:
import weakref
print("Creating object...")
class A(object):
def b(self):
print("I am still here")
a = A()
def d(r):
print("Aaah! Weakref lost ref")
print("Creating weak reference")
r = weakref.ref(a.b, d)
print("Oh, wait, its already gone!")
print("Ref == None, cause of untimely demise: %s" % r())
print("Object is still alive: %s" % a)
print("Function is still exists: %s" % a.b)
print("See:")
a.b()
I also tried this in Python 2.5 and 2.6 (with minor modifications to the syntax of course), and it yielded the exact same behavior. Why is this, and is there anything I can do about it? I wish to reference these bound functions, but I do not want to keep them in memory once the object they belong to is no longer referenced.
Regards,
Vincent van Beveren
___
Ing. V. van Beveren
Software Engineer, FOM Rijnhuizen
E: (e-mail address removed)