【发布时间】:2018-06-14 01:04:09
【问题描述】:
我不清楚 python 教程文档中的这一段在说什么。
(在这里找到:https://docs.python.org/3/tutorial/classes.html#method-objects)
当引用的实例属性不是数据属性时,将搜索其类。如果名称表示作为函数对象的有效类属性,则通过将实例对象和刚刚在抽象对象中找到的函数对象打包(指向)来创建方法对象:这就是方法对象。当使用参数列表调用方法对象时,会从实例对象和参数列表构造一个新的参数列表,并使用这个新的参数列表调用函数对象。
根据我目前的理解,我认为它的意思是,每当你引用一个类实例的属性时,就像这个小 sn-p 的第 8 行一样:
class MyClass():
attribute = "I am an attribute"
def func(self):
return "I am a function"
instance = MyClass()
print(instance.func())
当蟒蛇看到
instance.func()
它真正做的不是寻找func“拥有”instance的方法,而是寻找MyClass拥有的函数func,然后用@调用MyClass拥有的函数987654330@ 作为self 参数。
所以基本上是一样的:
MyClass.func(instance)
我觉得我错过了一些微妙的东西。我不明白这是什么意思
...通过将实例对象和刚刚在抽象对象中找到的函数对象打包(指向)来创建方法对象:这就是方法对象。
什么是抽象对象?
“打包”指针是什么意思?
“打包”多个指针是什么意思?
如果 python 只是要查看 MyClass 的函数对象,为什么还要为 instance 提供方法对象?
为什么 python 不只是让方法被它们的实例“拥有”?为什么还要经历调用MyClass的func而不是instance的func的整个过程?
为什么语言的设计者决定这样做?
【问题讨论】:
-
如果您有兴趣,这是一个相关的。这是python中类系统的功能实现(未回答)stackoverflow.com/q/50769327/7004463
标签: python python-3.x python-2.7