哪个更基础:Python函数或Python对象方法?

Dav*_*idG 10 python function object

我试图从概念上理解Python函数和方法的本质.我得到的函数实际上是对象,使用在执行函数时调用的方法.但是,函数对象方法实际上是另一个函数吗?

例如:

def fred():
    pass
Run Code Online (Sandbox Code Playgroud)

如果我看一下dir(fred),我看到它有一个名为的属性__call__.但dir(fred.__call__) 有一个名为的属性__call__.所以做fred.__call__.__call__等等.这一系列__call__对象的ids 表明它们都是截然不同的.它们真的是对象还是解释器的一些低级技巧?

哪个更基础:函数或对象方法?

Pet*_*sen 1

哪个更基本:函数还是对象方法?

我想最好的答案可能是“都不是”。请参阅Python 参考的执行模型部分,其中引用了“块”。这就是实际执行的内容。__call__您在无限搜索结束时所挂起的东西只是一个知道如何执行代码块的包装器(请参阅函数的各种属性func_xxx,而实际的字节码存储为func_code)。

同样相关的是函数定义部分,它指的是“函数对象[存在](函数可执行代码的包装器)”。最后,还有术语callable,它也可能是“哪个更基本?”的答案。