【发布时间】:2016-01-25 05:33:36
【问题描述】:
在各种教程中,我看到它声称使用instance.method() 调用方法在语法上等同于Class.method(instance)。我还在研究什么是“方法绑定”,官方 python 文档指出:
"当引用的实例属性不是数据属性时, 它的类被搜索。如果名称表示有效的类属性 也就是函数对象,方法对象是通过打包创建的 (指向)实例对象和刚刚找到的函数对象 一起在一个抽象对象中:这是方法对象。当。。。的时候 使用参数列表调用方法对象,新的参数列表是 由实例对象和参数列表构造而成,并且 使用这个新的参数列表调用函数对象。”
根据此描述,似乎只有instance.method() 语法会导致创建“抽象方法对象”,因为“正在引用实例属性”。如果是这样,这两个表达式在语法上如何等效?
【问题讨论】:
-
确切地说,它们在语法上并不等价,因为它们具有不同的语法。但他们有相同的结果。中间有一些步骤,
instance.method()调用class.method(instance)。最后,这只是“语法”的错误用法。