通过使用模块名称(字符串)来调用模块的功能

在Python程序中,给定带有函数名称的字符串来调用函数的最佳方法是什么。例如,假设我有一个模块foo,我有一个内容为的字符串"bar"。最好的通话方式是foo.bar()什么?

我需要获取函数的返回值,这就是为什么我不只是使用eval。我想出了如何通过使用eval定义一个返回该函数调用结果的temp函数来执行此操作的方法,但是我希望有一种更优雅的方法来执行此操作。


长风秋雁
浏览 231回答 3
3回答

元芳怎么了

假设模块foo与方法bar:import foomethod_to_call = getattr(foo, 'bar')result = method_to_call()您可以将第2行和第3行缩短为:result = getattr(foo, 'bar')()如果这对您的用例更有意义。您可以通过getattr这种方式在类实例绑定的方法,模块级方法,类方法...上使用清单。

拉风的咖菲猫

只是一个简单的贡献。如果我们需要实例化的类在同一文件中,则可以使用类似以下内容的东西:# Get class from globals and create an instancem = globals()['our_class']()# Get the function (from the instance) that we need to callfunc = getattr(m, 'function_name')# Call itfunc()例如:class A:    def __init__(self):        pass    def sampleFunc(self, arg):        print('you called sampleFunc({})'.format(arg))m = globals()['A']()func = getattr(m, 'sampleFunc')func('sample arg')# Sample, all on one linegetattr(globals()['A'](), 'sampleFunc')('sample arg')而且,如果不是一堂课:def sampleFunc(arg):    print('you called sampleFunc({})'.format(arg))globals()['sampleFunc']('sample arg')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python