How to get a unique id for bound methods?
Fredrik Lundh
fredrik at pythonware.com
Wed Aug 24 01:29:16 EDT 2005
Russell E. Owen wrote:
> Having looked at it again, it is familiar. I copied it when I wrote my
> own code. I avoided using at the time both because the initial
> underscore suggested it was a private method and because it introduces
> an extra function call.
>
> _register has the same weakness that my code had when I used id(func) --
> it uses the id of the function to generate the unique tk function name,
> but it keeps no reference to that function.
>
> Either Tkinter is clever about keeping a reference to each callable
> around, or else it has the same bug I was seeing and it just doesn't
> show up often enough to have been caught. I should take some time and
> look into that.
of course it keeps a reference to it; how else do you expect
the Tcl command to find the right PyObjects?
>>> import Tkinter
>>> w = Tkinter.Tk()
>>> def f():
... pass
...
>>> import sys
>>> sys.getrefcount(f)
2
>>> w.register(f)
'9571664f'
>>> sys.getrefcount(f)
3
>>> del f
>>> w.tk.call("9571664f")
'None'
(PyObject pointers to the callable and the interpreter object are
stored in a Tcl clientData record associated with the command)
</F>
More information about the Python-list
mailing list