【问题标题】:Weird Python issue when using reload使用重新加载时出现奇怪的 Python 问题
【发布时间】:2013-06-18 10:25:17
【问题描述】:

我不知道如何解决在我的程序中使用 reload 时遇到的问题。 如果我的代码是这样的

import mymodule
from mymodule import MYCLASS

x = MYCLASS()

然后一切正常。但是,如果我尝试像这样重新加载模块:

import mymodule
from mymodule import MYCLASS
x = MYCLASS()
reload(mymodule)
y = MYCLASS()

我遇到了一些奇怪的错误。我知道这可能是因为 MYCLASSmymodule 的引用发生了变化,但无法确切理解为什么以及如何防止它。

在这种情况下重新加载导入的模块和类的正确方法是什么?

【问题讨论】:

    标签: python reload


    【解决方案1】:

    您应该使用以下样式的重新加载。

    import mymodule
    x = mymodule.MYCLASS()
    mymodule = reload(mymodule)
    y = mymodule.MYCLASS()
    

    http://docs.python.org/2/library/functions.html#reload

    如果一个模块使用 from ... import 从另一个模块导入对象 ...,为其他模块调用 reload() 不会重新定义 从它导入的对象——解决这个问题的一种方法是重新执行 from 语句,另一个是使用导入和限定名 (模块。名称)。

    更新

    isinstance(x, mymodule.MYCLASS) 将是 False,因为类已重新初始化,但 x.__class__ 仍引用旧类。

    >>> isinstance(x, mymodule.MYCLASS)
    False
    >>> isinstance(y, mymodule.MYCLASS)
    True
    

    【讨论】:

    • +1。值得一提的是,在做了这样的事情之后,isinstance(x, mymodule.MYCLASS) 将是 False,因为类被重新初始化,但 x.__class__ 仍然引用旧类。
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2020-11-14
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多