Python 的 imp.reload() 函数不起作用?

2023-11-24

这是一个简洁的例子:

x.py:

class x:
  var = 'from x.py'

y.py:

class x:
  var = 'from y.py'

test.py

import imp
def write_module(filename):
  fp = open('z.py', 'w')
  fp.write(open(filename).read())
  fp.close()

write_module('x.py')
import z
print(z.x.var) # Prints 'from x.py'
write_module('y.py')
imp.reload(z)
print(z.x.var) # Prints 'from x.py'

我不确定为什么两个打印语句是相同的。如何让 python 在 reload() 之后使用类 x 的新定义?


发生这种情况是因为文件创建日期(z.py及其编译版本z.pyc) 是相同的,因此 Python 认为该文件未更改并且不会重新编译它。

实际上,当我尝试并重新尝试您的代码时,它曾经按预期工作 - 可能是因为这两个文件恰好是在系统时钟第二次转换的任一侧创建的。

import imp
import time
def write_module(filename):
  fp = open('z.py', 'w')
  fp.write(open(filename).read())
  fp.close()

write_module('x.py')
import z
print(z.x.var) # Prints 'from x.py'
time.sleep(1)  # Wait one second
write_module('y.py')
imp.reload(z)
print(z.x.var) # Prints 'from y.py'

显示预期结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 的 imp.reload() 函数不起作用? 的相关文章

随机推荐