On 24/09/2014 12:54, Dave Angel wrote:
Robin Becker <ro...@reportlab.com> Wrote in message:
...........
Is a loader supposed to reset all the reused module's attributes and reset the
__dict__ or does it just run the code from the module in hte __dict__?
Nothing gets reset or run. It simply reuses the existing module object.
I find that a bit weird. In fact as a test I created a testmod.py
#######
A=3
print('A=%r' % A)
#######
then in python3.4
Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06) [MSC v.1600 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import testmod
A=3
>>> testmod.A
3
>>> #I externally changed testmod.py to read
>>> #a=4
>>> #print('a=%r' % a)
>>> import imp
>>> imp.reload(testmod)
a=4
<module 'testmod' from 'C:\\code\\tests\\testmod.py'>
>>> testmod.A
3
>>> testmod.a
4
>>>
so you are right the old module variables are still there. Presumably any
functions/classes etc etc that don't get overwritten will also continue to exist.
There are ways to fool the loader, for example by having a module
visible in more than one file system path.
The most common of
these bugs is a module that tries to import the script that's
started it all. Because that initial script is named __main__
internally, if you try to import it by filename you end up with
two instances.
--
Robin Becker
--
https://mail.python.org/mailman/listinfo/python-list