擅长:python、mysql、java
<p>事实上,<code>getattr</code>会让你到达那里。在</p>
<pre><code>class X:
def a(self):
print('a called')
def b(self, arg):
print('b called with ' + arg)
x = X()
getattr(x, 'a')()
# a called
getattr(x, 'b')('foo')
# b called with foo
</code></pre>
<p>就像<code>getattr</code>以相同的方式处理方法和字段一样,您可以处理
通过引用<code>locals()</code>或{<cd4>}与类无关的函数和变量。在</p>
<p>如果要引用全局范围内的函数:</p>
^{pr2}$
<p>例如:</p>
<pre><code>def dispatch(name, *args, **kwargs):
globals()[name](*args, **kwargs)
dispatch('meth3', 'hello', foo='bar')
# meth3: hello
# foo: bar
</code></pre>
<p>请记住,在Python中,始终可以使用<code>**</code>传递参数列表或关键字参数dict:</p>
<pre><code>dispatch('meth3', *['hello'], **{'foo':'bar'})
</code></pre>
<p>如果您确实喜欢将参数作为list/dict传递给<code>dispatch</code>:</p>
<pre><code>def dispatch(name, args, kwargs):
globals()[name](*args, **kwargs)
dispatch('meth3', ['hello'], {'foo': 'bar'})
</code></pre>