首页 >后端开发 >Python教程 >为什么 Python 中的方法不表现出引用相等性?

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

Barbara Streisand
Barbara Streisand原创
2024-10-30 00:00:291125浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn