Christian Heimes schrieb:
Johannes Janssen wrote:
 > class A(object):
 >     def __init__(self, mod=__name__):
 >         self.mod = mod

.... won't work. In this case mod would always be "foo".

You have to inspect the stack in order to get the module of the caller. The implementation of warnings.warn() gives you some examples how to get the module name.

Christian

Thanks for the quick and very helpful reply. Basically just copying from warnings.warn(), I came up with this:

import sys

class A(object):
   def __init__(self, mod=None):
       if mod is None:
           self.mod = sys._getframe(1).f_globals['__name__']
       else:
           self.mod = mod

In warnings.warn() they used try around sys._getframe(1). As far as I understand what is done in warnings, there it is not sure what object caused the warning and therefore it is not sure whether you can or cannot use sys._getframe(1). Though in my case it should be quite clear. Can I be sure that my code will always work?

Johannes
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to