代码之家  ›  专栏  ›  技术社区  ›  Ray Salemi

用getattr()检索的Python方法在调用中不需要“self”吗?为什么不?

  •  0
  • Ray Salemi  · 技术社区  · 4 年前

    以下代码有效:

    class Foo:
        def run_this(self):
            print("ran this")
    
    ff = Foo()
    method = getattr(ff, "run_this")
    method()
    --
    run_this
    

    但我不明白为什么。如果getattr返回一个函数对象,我是否需要传递 self 将对象作为第一个参数。看来是 method 毕竟不是函数对象,但我不确定它是什么。为什么当我打电话时,自我会被忽略 method() ?

    这个 docs 只说

    getattr(对象,名称[,默认值]) 返回对象的命名属性的值。name必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x,'foobar')等价于x.foobar。如果命名属性不存在,则返回默认值(如果提供),否则将引发AttributeError。

    因此,他们回答了“发生了什么”的问题,但没有回答为什么会这样。

    0 回复  |  直到 4 年前