程序:当我在主程序中动态修改导入的类文件时,似乎正在运行old.pyc

2024-10-01 00:14:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图修改类运行时,它被导入到我的主程序中,并再次运行时本身。我正在导入同一个类,但这次它正在运行我的旧功能(在类修改之前)

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] 
}

如果我按以下顺序调用类def:

mydef()
mydef2()
mydef3()

在mydef3()中变老的功能

我知道我认为它的速度优化是python的一部分,所以它阻止了再次编译同一个类并导入它,但是它应该编译,因为类已经被修改了。你知道吗

请帮帮我?你知道吗


Tags: fromimport功能byheredefmyclassclass
2条回答

在单个解释器会话中,import只导入一次模块,即使源文件已被修改。模块对象在第一次导入时存储在sys.modules字典中,所有后续导入都使用该对象。您可以使用reload()来重新加载模块,但是修改源文件可能是实现您想要做的事情的最困难的方法。如果你发布了更多关于你的实际目标的信息(例如,为什么你认为你需要修改磁盘上的源文件并重新导入),可能会有人建议一个更好的方法。你知道吗

您可能希望研究子类化MyClass,而不是修改它。其他代码可能正在使用MyClass,并且可能不知道您所做的修改。你知道吗

例如

你知道吗我的模块.py地址:

class MyClass(object):
    def do_something(self):
        return 'Foo'

你知道吗修改.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

相关问题 更多 >