当模块名与类名相同时,直接导入模块后无法访问类方法,需明确区分模块与类的引用层级,或改用类导入方式,并遵循pep 8命名规范避免冲突。
在Python项目中,模块(.py文件)与其中定义的类使用相同名称(如模块 MIP.py 中定义类 class MIP:),极易引发 AttributeError: module has no attribute ‘read’ 这类看似矛盾的错误——尽管方法确实存在,但调用路径不正确。
根本原因在于:你执行了
from ..utilities import MIP as MIP
这行代码实际导入的是 模块对象 par_utils.utilities.MIP(即 MIP.py 文件本身),而非其中的 MIP 类。因此 MIP.read() 尝试在模块对象上调用 read 方法,而模块对象自然没有该属性——read 是类 MIP 的 @classmethod,并非模块的属性。
✅ 正确做法有两种:
立即学习“Python免费学习笔记(深入)”;