Python中能否在函数内定义函数以实现f().f2()链式调用效果?
Python 链式调用
f().f2()需求实现说明 结论
该需求完全可以实现。
实现原理
Python 中函数属于第一类对象,外层函数f()只要返回一个挂载了f2、f3方法的对象,就能满足你提到的链式调用语法要求。
可运行代码示例
方案1:返回自定义类实例(推荐,可读性和可维护性更强)
def f(): # 内部定义类承载f2、f3方法 class InnerClass: def f2(self): print("Hello world") def f3(self): print("自定义的其他输出字符串") # 外层函数返回内部类的实例 return InnerClass()
调用测试效果:
- 执行
f().f2(),控制台输出:Hello world - 执行
f().f3(),控制台输出:自定义的其他输出字符串
方案2:给内部函数对象直接绑定方法
利用Python函数本身支持挂载属性的特性,也可以不用类实现:
def f(): # 定义一个空的内层函数作为返回载体 def inner_holder(): pass # 定义f2、f3两个方法 def f2(): print("Hello world") def f3(): print("自定义的其他输出字符串") # 给载体函数绑定方法 inner_holder.f2 = f2 inner_holder.f3 = f3 # 返回挂载了方法的载体函数 return inner_holder
该方案的调用效果和方案1完全一致。
内容的提问来源于stack exchange,提问作者Rydex
相关产品推荐
相关产品推荐

