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

如何在Python中通过b.py间接调用c.py的foo函数(避免直接引用c.py)

解决方案:通过中间模块暴露依赖成员

Python模块的成员不会自动向上传递暴露,所以a.py仅导入b.py时,无法直接访问b.py所依赖的c.py中的成员。要实现需求,只需在b.py中将c.py的foo函数(或c模块本身)暴露到自身的命名空间即可,以下是具体实现示例:

1. 基础文件结构

三个模块文件处于同一目录下:

  • c.py:定义目标函数
  • b.py:作为中间模块,负责暴露依赖成员
  • a.py:业务调用模块,仅导入b.py

2. 各模块代码实现

c.py

def foo():
    print("执行c.py中的foo函数")

b.py(两种暴露方式可选)

方式一:直接暴露foo函数

将c.py的foo函数直接导入到b.py的命名空间,让a.py可以通过b.foo直接调用:

# 方式一:直接导出foo
from c import foo

# 可选:如果使用from b import *,需声明__all__控制导出内容
__all__ = ["foo"]

方式二:暴露c模块本身

保留模块层级,让a.py通过b.c.foo调用,适合需要访问c.py多个成员的场景:

# 方式二:暴露c模块
import c

# 可选:控制from b import *时的导出内容
__all__ = ["c"]

a.py(对应两种调用方式)

对应方式一的调用

import b

# 直接调用b暴露的foo函数
b.foo()

对应方式二的调用

import b

# 通过b访问c模块,再调用foo函数
b.c.foo()

注意事项

  • 如果使用from b import *的导入方式,必须在b.py中通过__all__声明允许导出的成员,否则无法导入未声明的内容。
  • 这种方式既满足了a.py仅依赖b.py的抽象需求,也避免了a.py直接与c.py产生耦合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:35:24