accessing variable of the __main__ module

Dave Angel davea at ieee.org
Sat Mar 20 15:50:17 CET 2010


News123 wrote:
>
> Steven D'Aprano wrote:
>   
>> <snip>
>> Now, in your case you escape that trap, because the import is inside a 
>> function, so it doesn't occur until you call the function. But it is 
>> still considered poor practice: it is best to avoid circular imports 
>> unless you really, really need them.
>>
>>
>> The question is, why does module mod.py care what is happening in 
>> main.py? It is better for mod.py to be self-contained, and not care about 
>> main.py at all. If it needs A, let the caller pass A to it:
>>     
>
>
> The reason is pure lazyness.
> I would like to 'try' something quickly.
>
> I have a module used by many different python programs.
>
> In case the __main__  module contains a certain object I'd like to
> extract information from this object if not not.
>
> This is for debug, not for 'production'.
>
> I'd prefer to change only one file and not many.
>
>
>   
First, the practical response:  yes, it'll work, and if this is really 
for debug, it's fine.   However, realize that many times "debug things" 
make it into the wild.

Any time recursion of imports occurs, it's a sign of trouble.  And doing 
it right isn't usually much harder than studying the hazards of the 
recursion.

In the particular case you're doing, I think there are at least three 
better solutions:

1) Pass A as an argument to a function call, for example   f(A).
2) Put A into a separate module that both main.py and mod.py import
3) Explicitly add A to mod.py's global space.     mod.A = A   written in 
main.py,  before calling the function mod.x().

HTH
DaveA




More information about the Python-list mailing list