python print函数的输出问题

classFoo(object):
deff(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))
输出结果:
20059185661922005885408456
>20059185661922005885410056
>20059185661922005885408456
问题:为什么三个输出会不相同?从结果可知:对象的__str__方法在print时没有被自行调用,那么要__str__还有什么用呢?
HUX布斯
浏览 584回答 2
2回答

不负相思意

为什么Foo.f和a.f不同?简单的理解是:Foo.f接受一个参数,而a.f已经绑定了Foo.f的第一个参数是a,所以Foo.f和a.f是不同的,a.f是Foo.f绑定了参数的版本,这时Foo.f==a.f.__func__。官方文档:Whenaninstancemethodobjectiscreatedbyretrievingauser-definedfunctionobjectfromaclassviaoneofitsinstances,its_self_attributeistheinstance,andthemethodobjectissaidtobebound.Thenewmethod’s_func_attributeistheoriginalfunctionobject.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript