Python中等价于Ruby的obj.send方法是什么?

13 投票
4 回答
4152 浏览
提问于 2025-04-16 13:17

在Ruby语言中,如果我有一个对象obj,并且这个对象有一个叫做funcname的方法,我可以用下面的方式来调用这个方法:
obj.send(funcname)

在Python中有没有类似的做法呢?

我想这样做的原因是,我有一个开关语句(switch statement),在里面我设置了funcname,最后想在开关语句的结尾调用这个方法。

4 个回答

1

或者,如果你喜欢的话,operator.methodcaller('foo') 是一个函数,它会在你传给它的对象上调用 foo 方法。换句话说,

import operator
fooer = operator.methodcaller("foo")
fooer(bar)

这相当于

bar.foo()

(我觉得这可能在某个合适的数学分类中是伴随或对偶的概念。如果你对数学感兴趣的话。)

10

嗯……这个意思是用 `getattr` 函数从一个对象 `obj` 中获取一个叫 `funcname` 的方法,然后用 `*args` 和 `**kwargs` 这些参数来调用这个方法。

>>> s = "Abc"

>>> s.upper()
'ABC'

>>> getattr(s, "upper")()
'ABC'

>>> getattr(s, "lower")()
'abc'
26
getattr(obj, "name")(args)

​​​​

撰写回答