old*_*ile 5 python python-2.7 python-3.x
我不清楚 python 教程文档中的这一段落在说什么。
\n\n(在这里找到:https://docs.python.org/3/tutorial/classes.html#method-objects)
\n\n\n\n\n当引用的实例属性不是数据属性时,将搜索其类。如果名称表示有效的类属性是函数对象,则通过将实例对象和刚刚找到的函数对象打包(指向)在一个抽象对象中来创建方法对象:这就是方法对象。当使用参数列表调用方法对象时,会根据实例对象和参数列表构造一个新的参数列表,并使用该新参数列表调用函数对象。
\n
根据我目前的理解,我认为它的意思是,每当您引用类实例的属性时,就像这个小片段的第 8 行所示:
\n\nclass MyClass():\n attribute = "I am an attribute"\n\n def func(self):\n return "I am a function"\n\ninstance = MyClass()\nprint(instance.func())\nRun Code Online (Sandbox Code Playgroud)\n\n当蟒蛇看到
\n\ninstance.func()\nRun Code Online (Sandbox Code Playgroud)\n\n它真正做的不是寻找func“拥有”的方法instance,而是寻找func拥有的函数MyClass,然后调用拥有的函数MyClass作为instance参数self。
所以基本上它与以下内容相同:
\n\nMyClass.func(instance)\nRun Code Online (Sandbox Code Playgroud)\n\n我觉得我错过了一些微妙的东西。我不明白这是什么意思
\n\n\n\n\n...方法对象是通过将实例对象和刚刚找到的函数对象打包(指向)在一个抽象对象中而创建的:这就是方法对象。
\n
什么是抽象对象?
\n\n“打包”指针是什么意思?
\n\n“打包”多个指针是什么意思?
\n\ninstance如果 python 只是要查看MyClass\ 的函数对象,为什么还要有一个方法对象呢?
为什么 python 不让方法被它们的实例“拥有”呢?为什么还要经历调用MyClass\'sfunc而不是instance\'s的整个过程func?
为什么该语言的设计者决定这样做?
\n“抽象对象”意味着不一定创建真正的Python对象,它只是描述幕后发生的事情的一种方式,就好像创建了某个对象一样。
“打包”意味着它只是将这些东西收集在一起成为这个抽象对象。
所以当你写的时候
instance.func()
Run Code Online (Sandbox Code Playgroud)
它在内部创建了代表函数与实例相结合的东西。调用此函数时,将按照您的描述调用方法函数,并将实例作为第一个参数传递(通常命名为self)。
为什么要这样做?这样你就可以传递这些东西:
foo = instance.func
foo()
Run Code Online (Sandbox Code Playgroud)
的值foo包含表示与实例组合的函数的抽象对象。
方法由类拥有,因此类的所有实例都会自动获得相同的方法。这是OO编程的本质,也是类之间继承的基础。
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |