Python 用字符串名调用方法

有时候,一些特殊情况,需要用到用字符串的方法名去调用方法。现在做个笔记避免以后一直搜。

官网示例
  • 官方中文文档3.8 https://docs.python.org/zh-cn/3/faq/programming.html#how-do-i-use-strings-to-call-functions-methods
StackOverflow
  • StackOverflow https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-by-using-its-name-a-string
官网搬运

如何使用字符串调用函数/方法?
有多种技巧可供选择。

  • 最好的做法是使用一个将字符串映射到函数的字典。 这一技巧的主要优势在于字符串不必与函数名称一致。 这也是用于模拟其他语言中 case 结构的主要技巧:

def a():
    pass

def b():
    pass

dispatch = {'go': a, 'stop': b}  # Note lack of parens for funcs

dispatch[get_input()]()  # Note trailing parens to call function
  • 使用内置函数 getattr()
import foo
getattr(foo, 'bar')()

请注意 getattr() 可用于任何对象,包括类、类实例、模块等等。

在标准库中多次使用了这个技巧,例如:

class Foo:
    def do_foo(self):
        ...

    def do_bar(self):
        ...

f = getattr(foo_instance, 'do_' + opname)
f()
  • 使用 locals() 或 eval() 来解析出函数名:
def myFunc():
    print("hello")

fname = "myFunc"
f = locals()[fname]
f()

f = eval(fname)
f()

注意:使用 eval() 速度慢而且危险。 如果你不能绝对掌控字符串的内容,别人将能传入可被解析为任意函数直接执行的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值