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

Python如何通过类名字符串跨模块获取指定类对象

问题根因

Python的目录形式包(带__init__.py的文件夹)被导入时,解释器默认只会执行包目录下的__init__.py文件,不会自动扫描、导入同目录下其他独立.py文件中定义的内容。
你当前能获取到folderc.py中定义的FolderC类,是因为该文件的内容已经被导入到了folderc包的命名空间中;但folderc_childa.py等其他子文件从未被主动导入,其中定义的类自然不会出现在folderc包的属性列表里,直接用getattr调用就会抛出属性不存在的错误。

修复方案

将需要通过包名直接访问的类,统一导入到folderc包目录下的__init__.py文件中即可。
示例配置(对应路径foldera/folderb1/folderc/__init__.py):

# 导入父类
from .folderc import FolderC
# 导入各个子类实现
from .folderc_childa import FolderCChildA
# 其余子类按相同格式追加导入即可
# from .folderc_childb import FolderCChildB

配置完成后,再执行getattr(foldera.folderb1.folderc, 'FolderCChildA')即可正常获取目标类对象,也可以直接遍历folderc包的属性,筛选得到所有需要的类列表。

如果后续子类实现数量较多、不想每次新增子类都手动修改__init__.py,也可以在__init__.py中编写动态扫描逻辑,自动遍历同目录下的.py文件导入符合命名规则的类;如果子类数量不多,手动显式导入可读性更高,也能避免误导出不需要对外暴露的内部实现类。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:45:58