Hi Ram, It seems to me that the reason you are not getting an answer is that people do not understand your question. I, for one, do not understand what you mean by "address". The common interpretation of this term is the physical (virtual) memory address of the PyObject (which might be useful for mangling with ctypes or an extension), but from your comments it does not seem that this is what you want. I assume you know of id(), so probably you do not need that as a unique id.
Please specify a clear use case. On Fri, Sep 10, 2010 at 9:40 PM, cool-RR <[email protected]> wrote: > On Fri, Sep 10, 2010 at 8:23 PM, Imri Goldberg <[email protected]>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." > No object in Python ever changes its physical address (at least I can not think of any such scenario). > > Why would I need to use gc for it? I can get the address for almost any > object with `__module__`. > If you need the address for enumerating the referrers, the answer would indeed be gc. Do you mean you want the container object, or the source file where the object is defined? Maybe inspect.getfile() or inspect.getmodule() could help? Note that some types of objects just do not contain this information (ints, strings etc.) > > 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? > Also, the pickle module in the standard library uses an object's address to > pickle some kinds of objects (classes, functions). > > pickle uses the name of the module and the name of the function/class to pickle it (assuming the modules would be available when unpickling - if not, you'd need the "fickle" module mentioned in a previous post). 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?") > > If I understand correctly, "inspect" is the module you seek. But to get a better answer, you will have to give a clearer description of what you are trying to achieve. AA
_______________________________________________ Python-il mailing list [email protected] http://hamakor.org.il/cgi-bin/mailman/listinfo/python-il
