class version of func_globals?
Jan Kaliszewski
zuo at chopin.edu.pl
Wed Dec 30 18:24:22 EST 2009
29-12-2009 samwyse <samwyse at gmail.com> wrote:
> On Dec 29, 5:18 am, Dave Angel <da... at ieee.org> wrote:
>> samwyse wrote:
>> > Is there any way to get the global namespace of the module in which a
>> > class was defined? Answers for both Python 2.x and 3.x will be
>> > cheerfully accepted.
>>
>> I don't know if it's the same in general, but consider the following
>> sequence in 2.6:
>>
>> import sys
>>
>> class MyClass(object):
>> pass
>>
>> print "class--", dir(MyClass)
>> print "module--", dir(MyClass.__module__)
>> mod = sys.modules[MyClass.__module__]
>> print mod
>> print "globals--", dir(mod)
>>
>> DaveA
>
> Excellent! Exactly what I wanted, but wasn't clever enough to figure
> out for myself. Thank you very much.
But dir(mod) gives you only names, not objects (though, of course, you
can get them "manually" with getattr(mod, name)). To get from a class
the same you get from function using func_globals (i.e. dictionary with
names as keys and objects as values), use:
mod = sys.modules[MyClass.__module__] # (as above)
vars(mod) # or mod.__dict__, though vars(mod) seems to me more elegant
Cheers,
*j
--
Jan Kaliszewski (zuo) <zuo at chopin.edu.pl>
More information about the Python-list
mailing list