为什么 Python 中的方法不表现出引用相等性?

Barbara Streisand
发布: 2024-10-30 00:00:29
原创
966 人浏览过

Why Do Methods Not Exhibit Reference Equality in Python?

为什么方法不表现出引用相等性?

在 Python 中,虽然函数保持引用相等性,但方法却不然。这种差异源于方法的创建方式。

方法创建

与函数不同,方法对象在每次访问时都会被实例化。这是因为方法本质上是描述符,当调用 .__get__ 方法时,它们会返回一个方法对象。

What.__dict__['meth']  # Function (not method) object
What.__dict__['meth'].__get__(What(), What)  # Method object
登录后复制

方法相等性测试

在 Python 3.8 及更高版本中,方法相等性是通过比较 .__self__ 和 .__func__ 属性来确定的。如果它们引用相同的函数和实例,则这些方法被认为是相等的。然而,在 3.8 之前,方法相等性行为根据方法的实现而不一致。

含义

方法相等性的这种变化会影响多种场景:

  • 当使用 is 运算符检查方法是否相同时,除非方法绑定到相同的实例和函数,否则它将返回 False。
  • 相反,Python 3.8 中方法的 == 相等性测试通过比较 .__self__ 和 .__func__ 属性来提供预期结果。

测试函数同一性的解决方案

要测试方法是否代表相同的底层函数,您可以可以比较它们的 .__func__ 属性:

What().meth.__func__ == What().meth.__func__
登录后复制

以上是为什么 Python 中的方法不表现出引用相等性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!