考虑以下代码:
class Person(object): def sayHello(self): return 'Hello' print(Person().sayHello is Person().sayHello)
我希望它显示 True。为什么它显示 False?
在 Python 中,当您访问实例上的方法时,每次都会创建一个新的绑定方法Person().sayHello对象。这意味着每次调用都会生成一个同时引用实例和方法的新绑定方法对象。因此,即使两个Person().sayHello表达式都引用类中的同一个方法,它们也是不同的对象,因此需要进行False比较is。
Person().sayHello
False
is
下面分析一下为什么会发生这种情况:
Person``Person().sayHello``Person().sayHello``sayHello``Person
Person().sayHello is Person().sayHello
True
如果您想要进行比较True,您可以将实例存储在变量中以重用相同的绑定方法:
p = Person() print(p.sayHello is p.sayHello) # This will be True
在这种情况下,p.sayHello两次访问指的是同一个绑定方法对象,因为它是同一个实例(p),并且 Python 会针对这次重复的访问重用绑定方法对象。
p.sayHello
p