class Foo(object):
def f(self):
pass
a=Foo()
print(id(Foo.f),id(a.f))
print(a.f,id(Foo.f),id(a.f))
print(str(a.f),id(Foo.f),id(a.f))
输出结果:
2005918566192 2005885408456
<bound method Foo.f of <__main__.Foo object at 0x000001D30A108B00>> 2005918566192 2005885410056
<bound method Foo.f of <__main__.Foo object at 0x000001D30A108B00>> 2005918566192 2005885408456
问题:为什么三个输出会不相同?
从结果可知:对象的__str__方法在print时没有被自行调用,那么要__str__还有什么用呢?
暂时不清楚为什么三个print的结果会不一样,估计是a.f在内存中发生了自动。
至于为什么没有调用__str__,因为代码就没有要求返回对a的描述,返回的都是对方法f的描述。
输出中,尖括号内“of”后面的内容由于是给机器看的,所以调用的是Foo类的__repr__方法,而不是__str__