我想知道在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中有没有办法从字符串中找到方法?
答案 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
并直接将字典映射到方法。