Load / Reload module
Peter Otten
__peter__ at web.de
Wed Feb 4 05:49:55 EST 2009
Scott David Daniels wrote:
> Marius Butuc wrote:
>> I want do declare some classes (classes.py) in an external editor,
>> than import the file and use the classes. After I change the file, I
>> want to reload the definitions w/o leaving the interactive
>> interpreter.
>>
>> So far I have tried
>> - import classes # doesn't import my classes
> Use this and refer to the class from the imported module.
>
> import classes
> instance = classes.SomeClass()
> ...
> reload(classes)
> instance = classes.SomeClass()
>
> This is by far the best way, but if you _must_,
> from classes import *
> instance = SomeClass()
> ...
> reload(classes)
> from classes import *
> instance = SomeClass()
Also note that only instances created after the reload will have the new
layout:
>>> import classes
>>> a = classes.SomeClass()
>>> print a
old
>>> open("classes.py", "w").write("""class SomeClass:
... def __str__(self): return 'new'
... """)
>>> reload(classes)
<module 'classes' from 'classes.py'>
>>> b = classes.SomeClass()
>>> print b
new
>>> print a
old
Sometimes you may be able to fix this manually by assigning to the
__class__:
>>> a.__class__ = classes.SomeClass
>>> print a
new
but I recommend that you put all your code into a another script rather than
resorting to such tricks
$ cat main.py
import classes
a = classes.SomeClass()
If you want to experiment with a in the interactive interpreter you can
invoke main with the -i option:
$ python -i main.py
>>> print a
new
Peter
More information about the Python-list
mailing list