栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

方法对象vs函数对象,Python类实例vs类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

方法对象vs函数对象,Python类实例vs类

绑定未绑定 方法-一种解释。

…或者为什么Python具有您指出的行为。

因此,首先请注意,这在3.x中是不同的。在3.x中,您将像预期的那样成为

MyClass.f
函数和
x.f
方法。这种行为本质上是一个糟糕的设计决策,后来又被更改。

原因是Python具有与大多数语言不同的方法的概念,该方法本质上是一个函数,其中第一个参数被预先填充为实例(

self
)。这种预填充构成 绑定方法

>>> x.foo<bound method MyClass.foo of <__main__.MyClass instance at 0x1004989e0>>

在Python 2.x和更早版本中,有理由认为未附加到实例的 方法 将是 未绑定方法 ,该 方法
是一个函数,其限制是第一个参数(

self
)必须是对象的实例。然后可以将其绑定到实例并成为 绑定方法

>>> MyClass.foo<unbound method MyClass.foo>

随着时间的流逝,很明显的是,一个未绑定的方法实际上只是具有这个无关紧要的限制的函数,实际上并不重要(

self
必须是 “正确”
类型),因此将它们从语言中删除(在3.x版中)。这本质上是鸭式打字
self
,适合语言。

Python 3.3.0 (default, Dec  4 2012, 00:30:24) >>> x.foo<bound method MyClass.foo of <__main__.MyClass object at 0x100858ed0>>>>> MyClass.foo<function MyClass.foo at 0x10084f9e0>

进一步阅读。

这是(从内存中压缩的)解释,可以从Python创造者Guido van Rossum自己的“ Python的历史”系列中完整地阅读。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号