Python自定义类调用报错:AttributeError: 'module' object has no attribute 'MyClass'排查求助
嘿,我之前也碰到过这个头疼的问题,咱们一个个来排查可能的原因,应该能很快解决!
1. 最常见的原因:代码缩进错误
你贴出来的my_module.py代码里,类的方法缩进明显有问题!Python是靠缩进区分代码块的,类里面的__init__方法必须缩进(通常是4个空格),否则这个方法不属于MyClass,甚至可能导致类定义不完整,或者模块加载时出现隐性问题。
正确的my_module.py代码应该是这样的:
# my_module.py class MyClass: def __init__(self, value): self.value = value
你检查下自己实际的代码,是不是缩进没做好?比如把def __init__顶格写了,那它就变成了全局函数,而不是MyClass的方法,极端情况下如果模块里还有其他语法错误,可能会导致MyClass没有被正确定义。
2. 模块命名冲突
有没有可能你的项目目录里,存在另一个叫my_module.py的文件?或者你不小心把脚本命名成了和Python标准库、第三方库同名的文件?比如如果有一个文件和你的目标模块重名,Python会优先加载那个错误的模块,导致找不到MyClass。
解决办法:
- 检查当前工作目录下的所有文件,确保只有一个
my_module.py - 如果是和第三方库重名,赶紧给你的模块改个独特的名字,比如
my_custom_module.py
3. Python缓存文件导致的旧代码加载
Python会生成__pycache__文件夹来缓存编译后的字节码,如果你之前修改过my_module.py,但缓存文件没更新,可能会加载旧的、没有MyClass的版本。
解决办法:
- 删除项目目录下的
__pycache__文件夹 - 重启你的Python解释器,重新运行脚本
4. 模块不在Python的搜索路径里
如果my_module.py和main.py不在同一个目录,Python默认找不到这个模块,这时候你虽然写了from my_module import MyClass,但Python加载的不是你写的那个模块,自然找不到类。
解决办法:
- 把
my_module.py移到和main.py同一个目录下 - 或者把
my_module.py所在的目录添加到Python的搜索路径里,比如在main.py开头加上:
import sys sys.path.append("/path/to/your/my_module_directory")
5. 拼写/大小写错误
虽然你说检查过了,但还是再确认一遍:
- 模块名是不是完全一致?比如是不是写成了
my_module而不是MyModule? - 类名是不是
MyClass?有没有写成myclass或者Myclass?Python是大小写敏感的!
如果以上方法都试过了还是不行,可以运行import my_module; print(dir(my_module)),看看模块里到底有哪些属性,这样就能知道MyClass是不是真的在里面了,方便进一步排查。
备注:内容来源于stack exchange,提问作者Albin Siby

