我正在尝试修改类运行时,它在我的主程序中导入并再次运行时。我正在导入同一个类,但这次它运行我的旧功能(在修改类之前)
def mydef()
{
from myclassfile import myclass
---------
---------
}
def mydef2()
{
from myclassfile import myclass
---------
---------
here, Modifying class by changing code in myclassfile
}
def mydef3()
{
from myclassfile import myclass
---------
---------
getting old functionality [before modification of class]
}
如果我按以下顺序调用class def:
mydef()
mydef2()
mydef3()
在mydef3()中获取旧功能
我知道我认为它是python的速度优化部分所以它阻止再次编译同一个类并导入它,但它应该编译,因为类已被修改。
请帮帮我吗?
答案 0 :(得分:1)
在单个解释器会话中,import
仅导入一次模块,即使源文件已被修改。模块对象在首次导入时存储在sys.modules
字典中,所有后续导入都使用该对象。您可以使用reload()
重新加载模块,但修改源文件可能是实现您想要做的最难的方法。如果你发布更多关于你的实际目标的信息(例如,为什么你认为你需要修改磁盘上的源文件并重新导入它),有人可能会建议更好的方法。
答案 1 :(得分:0)
您可能希望查看子类MyClass
而不是修改它。其他代码可能正在使用MyClass
,可能不知道您的修改。
例如,
mymodule.py:
class MyClass(object):
def do_something(self):
return 'Foo'
modified.py:
from mymodule import MyClass
class ModifiedClass(MyClass):
def do_something(self):
original = super(ModifiedClass, self).do_something()
return original * 2
def main():
mycls = MyClass()
modcls = ModifiedClass()
print mycls.do_something()
print modcls.do_something()
if __name__ == '__main__':
main()
输出:
$ python modified.py
Foo
FooFoo