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

Python如何通过字符串形式的函数名调用父函数内的嵌套子函数

实现方案

默认嵌套在函数内部的子函数属于父函数的局部作用域变量,未主动暴露的情况下外部无法直接访问,要实现需求可参考以下两种方案:

方案1:改造为可调用类,适配点操作符调用习惯

可以完美匹配你想要的调用风格,结合getattr处理字符串形式的函数名:

class ParentFunction:
    def __call__(self):
        # 原parent_function的核心逻辑写在这里
        print("父函数核心逻辑执行")
    
    def child_function(self):
        # 原child_function的逻辑写在这里
        print("子函数逻辑执行")

# 实例化后可以像普通函数一样调用,也可直接访问子函数
parent_function = ParentFunction()

method_name = "child_function"
# 通过getattr获取字符串对应的函数属性后调用
getattr(parent_function, method_name)()

如果是固定名称的子函数,也可以直接写parent_function.child_function()调用,和你预期的写法完全一致。

方案2:父函数返回子函数映射表,无侵入改造成本更低

如果不想调整原有父函数的实现结构,可以把需要对外暴露的子函数封装为字典返回:

def parent_function():
    # 原父函数核心逻辑
    print("父函数核心逻辑执行")
    
    def child_function():
        # 原子函数逻辑
        print("子函数逻辑执行")
    
    # 对外暴露的子函数映射
    return {
        "child_function": child_function
    }

method_name = "child_function"
# 调用父函数获取映射表后,通过字符串key调用对应子函数
export_funcs = parent_function()
export_funcs[method_name]()

原有写法报错的原因

Python中的函数虽然是支持挂载自定义属性的对象,但嵌套函数默认不会自动绑定到父函数的属性上,仅存在于父函数运行时的局部作用域中,因此直接通过parent_function.字符串变量名的方式无法读取到对应的子函数。如果不修改父函数的实现,没有常规方法可以直接访问函数内部的局部嵌套函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:45:03