对Python教程文档中一段的澄清

对Python教程文档中一段的澄清,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我不清楚python教程文档中的这一段是怎么说的 (可在此处找到:) 当引用的实例属性不是数据属性时,将搜索其类。如果名称表示作为函数对象的有效类属性,则通过打包(指向)实例对象和刚刚在抽象对象中找到的函数对象来创建方法对象:这就是方法对象。使用参数列表调用方法对象时,将从实例对象和参数列表构造新的参数列表,并使用此新参数列表调用函数对象 根据我目前的理解,我认为它的意思是,每当你引用一个类实例的属性时,就像这个小片段的第8行: class MyClass(): attribute =

我不清楚python教程文档中的这一段是怎么说的

(可在此处找到:)

当引用的实例属性不是数据属性时,将搜索其类。如果名称表示作为函数对象的有效类属性,则通过打包(指向)实例对象和刚刚在抽象对象中找到的函数对象来创建方法对象:这就是方法对象。使用参数列表调用方法对象时,将从实例对象和参数列表构造新的参数列表,并使用此新参数列表调用函数对象

根据我目前的理解,我认为它的意思是,每当你引用一个类实例的属性时,就像这个小片段的第8行:

class MyClass():
    attribute = "I am an attribute"

    def func(self):
        return "I am a function"

instance = MyClass()
print(instance.func())
当python看到

instance.func()
它真正做的不是寻找一个由实例拥有的方法,而是寻找一个由MyClass拥有的函数,然后用实例作为参数调用MyClass拥有的函数

所以基本上这和:

MyClass.func(instance)
我觉得我错过了一些微妙的东西。我不明白这是什么意思

。。。方法对象是通过将实例对象和函数对象打包(指向)在一个抽象对象中创建的:这就是方法对象

什么是抽象对象

“打包”指针意味着什么

“打包”多个指针意味着什么

如果python只想查看
MyClass
的函数对象,为什么还要为
实例
设置一个方法对象呢

为什么python不让方法由它们的实例“拥有”?为什么还要经历调用
MyClass
func
的整个过程,而不是调用
实例
func

为什么语言设计者决定这样做?

“抽象对象”意味着不一定要创建一个真正的Python对象,它只是一种描述幕后发生的事情的方式,就好像有一些对象正在被创建一样

“打包”意味着它只是将这些东西收集到这个抽象的对象中

所以当你写作的时候

instance.func()
它在内部创建表示与实例组合的函数的内容。调用此函数时,将按照所述调用方法函数,并将实例作为第一个参数传递(通常称为
self

为什么要这样做?这样你就可以传递这些信息:

foo = instance.func
foo()
foo
的值包含表示与实例组合的函数的抽象对象


方法由类拥有,因此类的所有实例自动获得相同的方法。这是面向对象编程的本质,也是类间继承的基础。

据我所知,python是用C编写的,那么抽象对象在C中会是什么样子呢?当你在较低的层次上谈论它时,它是否有更字面的意思?如果你感兴趣,这是一个相关的问题。它是python中类系统的功能实现(未回答)