以下代码有效:
class Foo: def run_this(self): print("ran this") ff = Foo() method = getattr(ff, "run_this") method() -- run_this
但我不明白为什么。如果getattr返回一个函数对象,我是否需要传递 self 将对象作为第一个参数。看来是 method 毕竟不是函数对象,但我不确定它是什么。为什么当我打电话时,自我会被忽略 method() ?
self
method
method()
这个 docs 只说
getattr(对象,名称[,默认值]) 返回对象的命名属性的值。name必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x,'foobar')等价于x.foobar。如果命名属性不存在,则返回默认值(如果提供),否则将引发AttributeError。
因此,他们回答了“发生了什么”的问题,但没有回答为什么会这样。