You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook调用Python类时__init__方法未被识别及模块修改不生效问题排查

问题分析与解决方法

你遇到的问题本质是Jupyter Notebook的模块缓存机制导致的——当你第一次导入InputData模块后,Python会把模块的内容缓存到内存里,之后即使你修改了InputData.py文件,Jupyter也会直接使用缓存里的旧版本模块,完全没用到你更新后的__init__方法,这就解释了为什么明明代码改了,却还是报奇怪的错误。

验证问题

你可以先在Notebook里运行这段代码,确认当前加载的是不是旧版本的类:

from InputData import InputData
print(InputData.__init__)

如果输出是类似object.__init__或者不带参数的方法,就说明确实在用缓存的旧模块。

解决方法

1. 手动重新加载模块(临时解决)

使用importlib.reload()强制刷新模块,步骤如下:

# 先导入模块本身(不是直接导入类)
import InputData
# 重新加载模块
import importlib
importlib.reload(InputData)
# 再重新导入类
from InputData import InputData

# 现在调用就会用更新后的代码了
input_data = InputData('input file')
print(input_data.input_file_name)

2. 重启Notebook内核(彻底解决单次修改)

这是最简单粗暴的方法:点击Jupyter界面顶部的「Kernel」菜单,选择「Restart」(或者「Restart & Run All」直接重新运行所有单元格)。重启后,所有模块都会重新从文件加载,你的修改自然就生效了。

3. 开启自动重载(长期推荐)

如果经常需要修改.py文件并在Notebook里测试,推荐开启Jupyter的autoreload扩展,它会自动监测文件变化并重新加载模块:
在Notebook的第一个单元格里运行:

%load_ext autoreload
%autoreload 2

之后你每次修改InputData.py,切换回Notebook运行代码时,都会自动使用最新的模块内容,不用再手动reload或者重启内核了。

内容的提问来源于stack exchange,提问作者mans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:37:47