You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何`SomeClass.method is SomeClass.method`结果为False?Python方法解析

关于Python类方法引用的is与==结果差异解答

首先,你观察到的现象完全合理——当你直接引用类的方法(比如SomeClass.a_method)时,Python确实每次都会生成一个新的未绑定方法对象(unbound method object),这就是示例1中SomeClass.a_method is SomeClass.a_method返回False的核心原因。

具体原因拆解:

  • 当你访问类的方法属性时,Python不会直接返回你定义的原始函数对象,而是会动态创建一个method对象来包装这个函数。每次你访问SomeClass.a_method,都会生成一个全新的包装实例,它们的内存地址完全不同,而is运算符是用来检查两个对象是否是同一个(即内存地址相同),所以结果自然是False。
  • 而==比较返回True,是因为method对象的相等性判断逻辑是基于底层的函数对象和所属类:只要两个方法对象包装的是同一个原始函数,并且属于同一个类,就会被判定为相等,和它们是不是同一个实例无关。

结合其他示例辅助理解:

  • 示例3中,SomeClass().a_method is SomeClass().a_method返回False,是因为每个实例的方法都是绑定方法对象(bound method object),每个绑定方法都关联着特定的实例,每次访问都会生成新的绑定方法实例,身份自然不同。
  • 示例4返回False,则是因为绑定方法的相等性判断还会考虑绑定的实例:两个不同实例的绑定方法,哪怕底层函数相同,也会因为绑定的实例不一样而被判定为不相等。

内容的提问来源于stack exchange,提问作者chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:32:04