Getting the module name from a method...

Michael P. Reilly arcege at shore.net
Tue Aug 17 17:27:45 CEST 1999


Olivier Deckmyn <olivier.deckmyn at mail.dotcom.fr> wrote:
: Hi !

: 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

  -Arcege





More information about the Python-list mailing list