New submission from Mark Dickinson: It would be nice to be able to access the callback of a weakref as an attribute on the weakref itself. For example:
Python 3.4.0a0 (default:2bf154ca43c6+, Apr 6 2013, 13:31:29) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import weakref >>> x = {1, 2, 3} >>> ref = weakref.ref(x, lambda ref: print("done")) >>> ref.__callback__ <function <lambda> at 0x1004f56d0> >>> del x done >>> ref.__callback__ # Returns None I encountered this while writing a tool to show graphs of Python objects and their references to each other: I wanted to be able to annotate each edge of the graph. For something like a function, it's easy to use introspection to compare the reference target with f.__code__, f.__annotations__, etc. For a weakref, I couldn't find an easy way to retrieve the callback (or even determine whether there *was* a callback associated to the weakref). One can do a "gc.get_referents" call and hope that if there's exactly one object returned it's the callback, but that won't work so well with weakref.ref subclasses. Patch attached: it has tests but no doc updates as yet. ---------- components: Interpreter Core files: weakref___callback__.patch keywords: patch messages: 186122 nosy: mark.dickinson priority: normal severity: normal stage: patch review status: open title: Expose weakref callback for introspection purposes. type: enhancement versions: Python 3.4 Added file: http://bugs.python.org/file29685/weakref___callback__.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue17643> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com