python有像call_user_func()PHP 一样的功能吗?
PHP版本:
call_user_func(array($object,$methodName),$parameters)
Run Code Online (Sandbox Code Playgroud)
如何在Python中实现上述功能?
我没有看到问题,除非methodName是一个字符串.在那种情况下,getattr完成这项工作:
>>> class A:
... def func(self, a, b):
... return a + b
...
>>> a = A()
>>> getattr(a, 'func')(2, 3)
5
Run Code Online (Sandbox Code Playgroud)
如果object也是一个字符串,那么这将使用全局变量或本地变量(但是你可能有其他更大的问题):
>>> getattr(locals()['a'], 'func')(2, 3)
5
>>> getattr(globals()['a'], 'func')(2, 3)
5
Run Code Online (Sandbox Code Playgroud)
编辑:重新澄清.要基于字符串初始化对象:
>>> class A:
... def __init__(self): print('a')
...
>>> class B:
... def __init__(self): print('b')
...
>>> clsStr = 'A'
>>> myObj = locals()[clsStr]()
a
Run Code Online (Sandbox Code Playgroud)
我不确定这是否真的是你想要的...除非你有很多不同的类,为什么不只是执行字符串匹配?
另一个编辑:虽然上面的工作,你应该认真考虑使用Ignacio Vazquez-Abrams提供的解决方案.首先,通过将所有可能的类存储在a中dict,可以避免因传递不正确的字符串参数而导致的奇怪行为,该字符串参数恰好与当前作用域中的非相关类的名称相匹配.