5

假设我有一个 Python 脚本main.py可以导入othermodule.py. 是否可以写一个reload(othermodule)inmain.py以便当我对 进行更改时othermodule.py,我仍然可以reload(main),然后重新加载其他模块?

4

2 回答 2

4

好吧,事情没那么简单。假设你有main.py这样的...

import time
import othermodule

foo = othermodule.Foo()
while 1:
    foo.foo()
    time.sleep(5)
    reload(othermodule)

...和othermodule.py这样的...

class Foo(object):
    def foo(self):
        print 'foo'

......那么如果你改变othermodule.py这个......

class Foo(object):
    def foo(self):
        print 'bar'

...虽然main.py仍在运行,但它会继续打印foo,而不是bar,因为fooin 中的实例main.py将继续使用旧的类定义,尽管您可以通过main.py这样来避免这种情况...

import time
import othermodule

while 1:
    foo = othermodule.Foo()
    foo.foo()
    time.sleep(5)
    reload(othermodule)

重点是,您需要了解导入模块的各种更改,这些更改会在reload().

可能有助于在原始问题中包含一些源代码,但在大多数情况下,重新启动整个脚本可能是最安全的。

于 2013-05-21T17:07:41.660 回答
1

Python 已经有reload()这还不够好吗?

从您的评论中,听起来您可能对深度重新加载功能感兴趣,ipython尽管我会谨慎使用它。

于 2013-05-21T16:39:24.500 回答