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