如何在Python shell中重新加载一个类?

8 浏览
0 Comments

如何在Python shell中重新加载一个类?

如果我导入一个定义在同名包中的类的模块,它会被导入为一个类,而不是一个模块,这是因为父包的__init__.py文件。详见不同目录导入结果不同。在Python shell或ipython shell中,如果我执行

from MyPak import MyMod

MyModule总是作为类导入,因此我无法重新加载它(reload()只适用于模块)。再次执行

from MyPak import MyMod

似乎不会更新类的定义。有人能提供一种在Python shell中更新类的方法吗?

附注:不重启Python解释器。

附附注:万一你手头有代码并想测试它:我实际上是在谈论BioPython,并且我正在处理Bio.PDB.PDBParser。我有一个ipython shell(v0.10)和编辑PDBParser.py文件。只是找不到在ipython中重新加载它的方法。

所以这是我做的:

# 启动ipython v0.10
import Bio
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure()
# 然后我在PDBParser.py文件中进行了一些更改,例如简单地打印一些文本
del Bio
del PDBParser
del s
import Bio  # 或者reload(Bio)而不删除所有对象
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure() # 预期的更改后输出没有看到 :(

我看不到打印的文本。更改似乎没有被应用。

0