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

Python含__init__.py的模块导入问题:子类继承抽象父类报错

解决Python子文件夹模块导入问题

先明确你的项目结构:

project/
├── main.py
└── folder/
    ├── __init__.py
    ├── parent.py
    └── child.py

1. 修正child.py的内部导入

你之前的错误出在child.py里的导入逻辑——Python默认从顶级模块路径查找,直接写import parent找不到同目录下的parent.py,必须用相对导入或者基于项目的绝对导入:

# child.py
# 相对导入:. 表示当前文件夹
from .parent import Parent  # 建议类名大写,符合PEP8规范

class Child(Parent):
    # 实现父类的抽象方法
    def your_abstract_method(self):
        pass

如果parent.py里的父类是抽象类,记得先导入ABC和abstractmethod:

# parent.py
from abc import ABC, abstractmethod

class Parent(ABC):
    @abstractmethod
    def your_abstract_method(self):
        pass

2. 配置folder/__init__.py

要让main.py能直接从folder导入类,在__init__.py里显式导出需要的类:

# folder/__init__.py
from .parent import Parent
from .child import Child

# 配合from folder import * 使用,指定导出的类列表
__all__ = ["Parent", "Child"]

3. main.py中的正确导入方式

有三种常用方式可选:

  • 方式一:直接导入指定类
# main.py
from folder import Parent, Child

# 实例化使用
child_obj = Child()
child_obj.your_abstract_method()
  • 方式二:导入整个folder模块后调用
# main.py
import folder

child_obj = folder.Child()
child_obj.your_abstract_method()
  • 方式三:批量导入(依赖__init__.py里的__all__)
# main.py
from folder import *

child_obj = Child()
child_obj.your_abstract_method()

错误原因说明

  • 之前child.py用import parent报错,是因为Python的模块查找路径默认不包含当前子文件夹,必须通过相对导入(.)或者绝对导入(from folder.parent import Parent)指定模块位置。
  • __init__.py的作用是把文件夹标记为Python包,同时对外导出模块,但它不能修正子模块内部的导入错误——child.py自身的依赖逻辑需要自己处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:11