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

Python跨文件调用双前导下划线开头方法报错如何解决?

报错原因

Python 存在**名称改写(Name Mangling)**机制:对仅前缀带双下划线、后缀不带双下划线的标识符,会自动修改其存储名称,避免外部直接访问这类设计为私有属性/方法的成员。
你在legacy.py中定义的def __check()符合名称改写的触发条件,导入模块后该方法的实际名称被修改为_legacy__check,直接调用legacy.__check()自然会触发你遇到的报错:

AttributeError: module 'folder.legacy' has no attribute '__check'

解决方案

方案1(优先推荐):调整legacy.py的方法命名

如果有权限修改legacy.py的代码,把双下划线前缀改为单下划线即可,单下划线是社区约定的私有标识,不会触发名称改写:

# legacy.py修改后
def _check():
    ...
    return True if ... else False

main.py中直接调用修改后的方法:

from folder import legacy

def main():
    print(legacy._check())

方案2(无法修改legacy.py时使用):调用改写后的名称

如果不能修改legacy.py的源码,直接使用改写后的名称调用即可:

from folder import legacy

def main():
    print(legacy._legacy__check())

内容的提问来源于stack exchange,提问作者Jared Dominic Caraan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:03