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

Python包内无需指定模块名调用函数:如何保持原有调用方式?

保持包原有调用方式的规范实现方法

规范实现方法

要让用户继续沿用import mypack + mypack.callMe()的调用方式,核心是在mypack/__init__.py中把mycalls.py里的callMe函数导入到包的顶层命名空间,有两种实现方式:

  • 显式导入指定函数(推荐)
    在__init__.py中写入:

    from .mycalls import callMe
    

    这种方式直接明确对外暴露的接口,后续维护时一目了然。

  • 通配符导入(不推荐)
    即你提到的写法:

    from .mycalls import *
    

关于from .mycalls import *是否为良好实践

这不属于良好实践,原因如下:

  1. 存在命名冲突风险:通配符会导入mycalls.py中所有未以_开头的名称,若后续其他模块出现同名函数,会直接覆盖原有名称,引发难以排查的bug。
  2. 对外接口不清晰:用户查看__init__.py时无法直接知晓包对外提供的接口,不符合Python"显式优于隐式"的设计原则。
  3. API稳定性差:如果mycalls.py后续新增其他函数,通配符会自动将这些新函数暴露出去,可能意外破坏依赖该包的原有代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:12:31