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

Python OOP跨文件导入类报错:AttributeError问题排查

问题原因及解决方案

我来帮你拆解下这个导入问题哈!

首先,咱们先定位核心问题:你在temp文件夹里直接运行unittest.py时,用了import temp.aaaa的导入方式,但此时Python的模块搜索路径并没有包含上层的Project目录,导致它找不到temp这个包,自然也就无法识别temp.aaaa了。

具体原因拆解

先再明确下你的项目结构:

->Project:
 --> temp:
 ---> extr(folder)
 ---> __init__.py
 ---> aaaa.py
 ---> unittest.py
 ---> test.txt

当你直接在temp文件夹内执行python unittest.py时,Python会把当前的temp文件夹路径加入到sys.path(模块搜索路径)中。这时候你写import temp.aaaa,Python会去sys.path里找名为temp的模块,但sys.path里的temp是当前目录,不是一个可被导入的上层包,所以就抛出了AttributeError: module 'temp' has no attribute 'aaaa'的错误。

两种可行的解决方案

方案一:直接导入同目录模块(适合在temp文件夹内直接运行脚本)

既然aaaa.py和unittest.py在同一个目录下,直接导入aaaa即可,修改unittest.py代码如下:

import aaaa
y = aaaa.Test()

保存后直接运行,就能正常实例化Test类了。

方案二:以包的形式运行(适合从Project目录启动)

如果你想保留import temp.aaaa的写法,需要从Project目录下,以模块的方式运行unittest.py:

  1. 保持unittest.py代码不变:
import temp.aaaa
y = temp.aaaa.Test()
  1. 打开终端,切换到Project目录,执行以下命令:
python -m temp.unittest

这种方式下,Python会把Project目录加入sys.path,temp会被识别为合法的包,就能正确导入temp.aaaa了。

另外补充小提示:如果想用相对导入(比如from . import aaaa),只能在把脚本作为包的一部分运行时使用,直接运行脚本会报错,所以不太推荐给刚接触模块导入的同学~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:56