使用方法名称的字符串检索方法?蟒蛇

时间:2010-06-23 21:26:56

标签: python

我想知道在Python中是否可以使用它的字符串名称在不同的函数中查找方法。

在一个函数中,我传递了一个方法:

def register(methods):
    for m in methods:
        messageType = m.__name__
        python_client_socket.send(messageType)


register(Foo)

在接收发送的字符串的另一种方法中,我希望能够将数字与字典中的方法相关联(即methodDict = {1: Foo, 2:Bar, etc...}

Python中有没有办法从字符串中找到方法?

5 个答案:

答案 0 :(得分:6)

如果你某个方法名称(使用任意输入):

getattr(someobj, methodDict[someval])

答案 1 :(得分:3)

这样就完成了“如果定义使用它,那么让用户知道它尚未准备好”的感觉。

if hasattr(self, method):
  getattr(self, method)()
else:
  print 'No method %s.' % method

答案 2 :(得分:1)

虽然其他答案是正确的,getattr是从字符串中获取方法的方法,但如果您预先填充带有方法名称的字典,请不要忘记这些方法本身是Python中的第一类对象,同样可以存储在词典中,可以直接调用它们:

methodDict[number]()

答案 3 :(得分:0)

globals()将返回所有local-ish方法和其他变量的字典。要从字符串中启动已知方法,您可以执行以下操作:

known_method_string = 'foo'
globals()[known_method_string]()

编辑:如果您从对象的角度来调用它,getattr(...)可能更好。

答案 4 :(得分:0)

method = getattr(someobj, method_name, None)
if method is None:
    # complain
    pass
else:
    someobj.method(arg0, arg1, ...)

如果你正在处理类似于处理XML流的事情,你可以绕过getattr并直接将字典映射到方法。