为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

长风秋雁 2021-03-22 10:48:45
在Python程序中,给定带有函数名称的字符串来调用函数的最佳方法是什么。例如,假设我有一个模块foo,我有一个内容为的字符串"bar"。最好的通话方式是foo.bar()什么?我需要获取函数的返回值,这就是为什么我不只是使用eval。我想出了如何通过使用eval定义一个返回该函数调用结果的temp函数来执行此操作的方法,但是我希望有一种更优雅的方法来执行此操作。
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

假设模块foo与方法bar:


import foo

method_to_call = getattr(foo, 'bar')

result = method_to_call()

您可以将第2行和第3行缩短为:


result = getattr(foo, 'bar')()

如果这对您的用例更有意义。


您可以通过getattr这种方式在类实例绑定的方法,模块级方法,类方法...上使用清单。


查看完整回答
反对 回复 2021-03-22
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

只是一个简单的贡献。如果我们需要实例化的类在同一文件中,则可以使用类似以下内容的东西:


# Get class from globals and create an instance

m = globals()['our_class']()


# Get the function (from the instance) that we need to call

func = getattr(m, 'function_name')


# Call it

func()

例如:


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 line

getattr(globals()['A'](), 'sampleFunc')('sample arg')

而且,如果不是一堂课:


def sampleFunc(arg):

    print('you called sampleFunc({})'.format(arg))


globals()['sampleFunc']('sample arg')


查看完整回答
反对 回复 2021-03-22
  • 3 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号