faqts : Computers : Programming : Languages : Python : Snippets

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

3 of 4 people (75%) answered Yes
Recently 1 of 2 people (50%) answered Yes

Entry

Getting the module name from a method

Jul 5th, 2000 10:00
Nathan Wallace, Hans Nowak, Snippet 136, Michael P. Reilly


"""
Packages: modules_and_packages
"""
"""
: I would like a method of my own to be able to print the module it is
: declared in:
: ex:
: the text for the module : toto.py is :
: class MyClass:
:     def myMethod(self):
:         print "I am in module", ????????
: and then
: MyClass().myMethod()
: should produce :
: 'toto'
Unless the method was added as an instance attribute (self.method =
...),
the global namespace should be the module where the method was defined,
in this case "toto".  The less secure means would be
globals()['__name__'], but you could also go with:
"""
import os, sys
def mymodule():
    try:
      raise RuntimeError
    except RuntimeError:
      exc, val, tb = sys.exc_info()
      code = tb.tb_frame.f_back.f_code
      del exc, val, tb
    if code.co_filename:
      module = os.path.splitext(os.path.basename(code.co_filename))[0]
    else:
      module = '<string>'
    return module