如何在 python shell 中重新加载类?

2024-03-11

如果我导入一个定义属于某个包的同名类的模块,则由于父包的 __init__.py,它会作为类导入,而不是模块。看不同目录下导入结果不同 https://stackoverflow.com/questions/6945592/different-import-results-at-different-directories了解详情。在 Python shell 或 ipython shell 中,如果我这样做

from MyPak import MyMod

MyModule 始终作为 Class 导入,因此我无法重新加载它( reload() 仅适用于模块)。跑步

from MyPak import MyMod

再次似乎没有更新类定义。有人能建议一种在 python shell 中更新类的方法吗?

附:无需重新启动 python 解释器。

pps。以防万一您手头有代码并想要测试它:我实际上正在谈论 BioPython,并且我正在研究 Bio.PDB.PDBParser。我有一个 ipython shell (v0.10) 并编辑 PDBParser.py。只是没有办法在 ipython 中重新加载它。

所以这就是我所做的:

# start ipython v0.10
import Bio
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure()
# then I make changes,e.g. simply print some text, in PDBParser.py
del Bio
del PDBParser
del s
import Bio  # or reload(Bio) without deleting all the objects
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure() # expected output after change not seen :(

我看不到打印的文字。这些更改并未以某种方式应用。


仅在 Python 3 上,导入reload https://docs.python.org/3/library/importlib.html#importlib.reload功能:

>>> from importlib import reload

在 Python 2.x 和 3.x 上,您可以简单地调用reload在模块上:

>>> import MyPak
>>> reload(MyPak)
>>> from MyPak import MyMod

但是,旧类的实例将不会更新(根本没有描述更新机制的代码)。

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

如何在 python shell 中重新加载类? 的相关文章

随机推荐