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