Function getting a reference to its own module

Arnaud Delobelle arnodel at googlemail.com
Sun Sep 14 14:24:44 EDT 2008


On Sep 14, 5:10 pm, "Aaron \"Castironpi\" Brady"
<castiro... at gmail.com> wrote:
> On Sep 14, 4:43 am, Arnaud Delobelle <arno... at googlemail.com> wrote:
>
>
>
> > On Sep 14, 10:29 am, Steven D'Aprano <st... at REMOVE-THIS-
>
> > cybersource.com.au> wrote:
> > > I have a function that needs a reference to the module object it is
> > > defined in. (For the reason why, if you care, see the thread "doctest not
> > > seeing any of my doc tests" from a week ago.) I know of two ways to deal
> > > with this problem, both of which feel unsatisfactory to me. Assume the
> > > name of the module is "Mod", then I can do either of these:
>
> > > def foo():
> > >     import Mod
> > >     process(Mod)
>
> > > Disadvantage: If I change the name of the module, I have to remember to
> > > change the name of the module reference in foo() twice.
>
> > > def foo():
> > >     modname = foo.__module__
> > >     module = __import__(modname)
> > >     process(module)
>
> > > Disadvantage: if I change the name of the function, I have to remember to
> > > change the reference to itself, but at least both changes are right next
> > > to each other.
>
> > > Assume that changing the function name or the module name are both
> > > equally likely/unlikely.
>
> > > Which do other people prefer? Which seems "better" to you? Are there any
> > > other alternatives?
>
> > What about something like:
>
> >     sys.modules[__name__] ?
>
> > --
> > Arnaud
>
> You're just worried about changing the module's name in the future.
> So use a global variable or function that you only have to change
> once.
>
> def Mod_mod( ):
>    import Mod as Mod #<-- only one change needed
>    return Mod
>
> def foo( ):
>    process( Mod_mod( ) )

Or:

import ModuleName as this_module

def foo():
    process(this_module)

--
Arnaud




More information about the Python-list mailing list