classFoo(object):deff(self):passa=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))输出结果:200591856619220058854084562005918566192200588541005620059185661922005885408456问题:为什么三个输出会不相同?从结果可知:对象的__str__方法在print时没有被自行调用,那么要__str__还有什么用呢?
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
为什么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.
添加回答
举报
0/150
提交
取消