Python中等价于Ruby的obj.send方法是什么?
在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)