[Python-il] Is there a Python module for handling Python object addresses?
shai at platonix.com
Fri Sep 10 22:26:28 IDT 2010
On Friday 10 September 2010, cool-RR wrote:
> On Fri, Sep 10, 2010 at 8:23 PM, Imri Goldberg <lorgandon at gmail.com> wrote:
> > Several points:
> > 1. Unless you are doing something very special (like a debugger), needing
> > this seems like a bad design choice. Just my shnekel.
> > 2. Although you can (in some cases for some value of some) define it,
> > talking about an "official address" of an object, seems extremely
> > non-pythonic.
> > 3. To your actual question: you can use the gc module to get the
> > referrers to a specific object. By traversing this tree structure, you
> > can probably extract the information you want. Furthermore, for many
> > objects, such as instances and functions, finding the definition point
> > is not that hard (using the inspect module). In any case it seems to me
> > that what you seek to do seek to do will be very hard to accomplish
> > correctly, require some "deep magic", and IMHO, yield low returns.
> > Cheers,
> > Imri
> Hi Imri,
> I said:
> "When I say "object", I mostly mean classes, modules, functions, methods,
> stuff like these, which usually do not change their address."
> Why would I need to use gc for it? I can get the address for almost any
> object with `__module__`.
"Almost" indeed. Expect problems with naive decorators (those who wrap
functions without using functools.wraps or doing the equivalent), in
> This kind of thing is used in Django settings module, (specifying strings
> instead of objects themselves,) so why is it a bad design choice when I
> want to do it?
It's fine when you go from names to objects (as Django does). It's suspicious
when you try to go from objects to names, because there is (in general) no
unique or even preferred name for any objects; and functions, methods and
classes are just like any other object in that respect. Imri's mention of a
debugger makes me think that is what he was referring to.
> Also, the pickle module in the standard library uses an object's address to
> pickle some kinds of objects (classes, functions).
> Anyway, I'm frustrated from getting a lot of "You're doing it wrong"
> answers for this question, and I just want an answer, not explanation on
> why I shouldn't do it. (My question is, "Is there a mature module for
> these tasks?")
Your frustration notwithstanding, this is a public list and people will
express their opinions and not just what you want to hear.
I am not aware of a mature module for the tasks you specified, and -- for the
reasons mentioned above -- believe the existence of one is unlikely.
Hope this helps,
More information about the Python-il