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

Jupyter Notebook调用外部类时displayTest方法报错原因排查

问题描述

在Jupyter Notebook中调用外部类DataSet时出现异常:为测试新增了两个逻辑完全一致的方法dataSet_description和displayTest,前者可正常执行并返回结果,后者却抛出AttributeError,提示DataSet对象没有displayTest属性。已多次保存类文件和Jupyter文件,重启内核后问题仍存在。

类文件ClassObject_1.py代码:

class DataSet:
  def __init__(self, slv_tuple, tec_name,projectID, sampleID):
    self.slv_tuple=slv_tuple
    self.tec_name=tec_name
    self.projectID=projectID
    self.sampleID=sampleID
 
 # function1 : 可正常运行
 def dataSet_description(self):
    return "{} {} {} {}".format(self.slv_tuple, self.tec_name, self.projectID, self.sampleID)

 # function 2: 无法运行
 def displayTest(self):
    return "{} {} {} {}".format(self.slv_tuple, self.tec_name, self.projectID, self.sampleID)

Jupyter Notebook代码:

from ClassObject_1 import DataSet
ds_1=DataSet(slv_tuple, 'test', projectID, sampleID)

# 无报错
print(ds_1.dataSet_description())
# 输出:('1,2,3',) test P12345678 S12345678

# 报错
print(ds_1.displayTest())
# 错误信息:AttributeError: DataSet object has no attribute 'displayTest'
可能的原因及解决方法
  • 缩进不符合Python规范:Python依靠缩进区分代码块,若displayTest方法的缩进级别和类DataSet的缩进不一致(比如比__init__方法缩进少),会导致该方法不属于类的成员,而是类外部的独立函数。检查类文件中该方法的缩进,确保它和dataSet_description、__init__的缩进一致,都属于DataSet类内部。
  • 类文件路径不匹配:确认Jupyter当前工作目录和ClassObject_1.py所在目录一致。可在Notebook中执行import os; print(os.getcwd())查看当前工作目录,若类文件在其他路径,要么把类文件移到当前工作目录,要么把类文件所在路径添加到Python环境变量中。
  • 字节码缓存残留:Python会生成.pyc缓存文件保存编译后的字节码,若缓存未更新,导入的仍是旧版本类定义。找到类文件所在目录下的__pycache__文件夹,删除其中的ClassObject_1.cpython-*.pyc文件,再重启Jupyter内核重新导入。
  • 模块未重新加载:若之前已导入过ClassObject_1模块,即使修改了类文件,内存中的模块定义不会自动更新。可在Notebook中执行from importlib import reload; reload(ClassObject_1)重新加载模块,再重新实例化DataSet对象进行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:30:38