如何在 Jupyter Notebook 中正确导入自定义类

2026-01-29 00:00:00 作者:心靈之曲

jupyter notebook 文件(`.ipynb`)本身不能被直接作为模块导入;必须将类定义移至 `.py` 文件中,再通过标准 python 导入机制使用。

在 Jupyter 中开发时,常会误以为 .ipynb 文件像普通 Python 模块一样可被 import —— 但实际上,Jupyter Notebook 是基于 JSON 的交互式文档格式,并非合法的 Python 模块。当你执行 from rentalcar import rentalcar 时,Python 解释器会在 sys.path 中查找名为 rentalcar.py 的模块,而不会识别或加载 rentalcar.ipynb。

✅ 正确做法如下:

  1. 将类导出为 .py 文件
    打开 rentalcar.ipynb,复制其中 class rentalcar: 及其依赖代码(如导入语句、辅助函数等),粘贴到新文件 rentalcar.py 中,并保存在与 customer.ipynb 同一目录下(或确保该路径已加入 sys.path)。

    # rentalcar.py
    from datetime import datetime
    
    class rentalcar:
        def __init__(self, model, daily_rate):
            self.model = model
            self.daily_rate = daily_rate
    
        def calculate_cost(

    self, days): return self.daily_rate * days
  2. 在 customer.ipynb 中正常导入

    from datetime import datetime
    from rentalcar import rentalcar  # ✅ 现在可成功导入
    
    class Customer:
        def __init__(self, name, rental_company):
            self.name = name
            self.rental_company = rental_company
    
    # 示例使用
    car = rentalcar("Toyota Camry", 45.0)
    print(f"3-day rental cost: ${car.calculate_cost(3)}")

⚠️ 注意事项:

  • 确保 rentalcar.py 与 customer.ipynb 位于相同工作目录(可通过 !pwd 或 os.getcwd() 查看);
  • 若修改了 rentalcar.py,在 Jupyter 中需重新运行 import 语句(推荐配合 importlib.reload 避免内核缓存问题):
    import importlib
    import rentalcar
    importlib.reload(rentalcar)
  • 不建议用 %run rentalcar.ipynb 替代导入——它仅执行代码,不创建可复用的模块命名空间,且无法跨 notebook 共享类定义。

? 总结:Jupyter 是探索和演示工具,而模块化开发应遵循 Python 工程规范——将可复用逻辑封装进 .py 文件。这是兼顾交互性与可维护性的最佳实践。

猜你喜欢

联络方式:

400 9058 355

邮箱:8955556@qq.com

Q Q:8955556

微信二维码
在线咨询 拨打电话

电话

400 9058 355

微信二维码

微信二维码