Чертенок в Python.функция reload () не работает?
вот конкретный пример:
х.пы:
class x:
var = 'from x.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 использовать новое определение класса x после перезагрузки ()?
1 ответов
это происходит потому, что даты создания файла (из 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'
показывает ожидаемый результат.