从同一文件导入相互依赖类时出现ImportError求助
解决跨文件导入类时的ImportError问题
我原本将两个类放在同一文件中可正常运行,现在为了代码结构拆分,把ApiConfig和Base_api放到file1.py,继承它们的Login、Browse类放到file2.py,但在main.py调用时出现ImportError: cannot import name 'Base_api' from 'file1'错误,以下是具体代码与问题详情:
file1.py 代码
# file1.py class ApiConfig(): def __init__(self, ip: str = ""): self.ip = ip ... class Base_api(): method_name = None params = None ip = "" def __new__(config: ApiConfig, *args, **kwargs): self.ip = config.ip self.__init__(config, *args, **kwargs) ... ...
file2.py 代码
# file2.py import file1 # from file1 import ApiConfig,Base_api class Login(Base_api): method_name = "Login" def __init__(self, config: ApiConfig, user: str = "usr", password: str = "pwd"): self.params = {"user": user,"password": password} ... ... class Browse(Base_api): method_name = "Browse" ...
main.py 代码
# main.py from Subfolder.file2 import login login()
错误信息
ImportError: cannot import name 'Base_api' from 'file1'
解决步骤
修正导入方式
如果file1.py与file2.py在同一目录,直接使用显式导入替换import file1:from file1 import ApiConfig, Base_api若
file1.py在其他路径,需确保目标路径被Python识别为可导入目录,或使用相对/绝对导入语法。检查命名一致性
Python对大小写敏感,确保所有文件中Base_api的拼写(包括下划线、大小写)完全一致。排查循环导入
确认file1.py没有导入file2.py的内容,循环导入会触发此类导入错误,需重构代码解除依赖。配置包结构
若main.py在Subfolder上级目录,需在Subfolder下添加空的__init__.py文件,将其标记为Python包。此时file2.py导入file1可使用相对路径:from .file1 import ApiConfig, Base_api修复
__new__方法定义Base_api的__new__方法参数有误,第一个参数应为类本身cls,正确写法如下(此问题虽不直接导致导入失败,但会引发实例化错误):def __new__(cls, config: ApiConfig, *args, **kwargs): instance = super().__new__(cls) instance.ip = config.ip instance.__init__(config, *args, **kwargs) return instance
内容的提问来源于stack exchange,提问作者Mustafa Badreldin
相关产品推荐
相关产品推荐

