|
发表于 2020-7-19 00:20:26
|
显示全部楼层
本楼为最佳答案
__str__ 和 __repr__ 的主要相同点是在 print 函数被调用时候都会自动调用
__str__ 和 __repr__ 的主要不同点是__repr__ 魔法方法,在对象被调用时候也会返回__repr__设置的返回值字符串信息
而当 __str__ 和 __repr__ 同时在类中被定义时候,print 只会自动调用 __str__ 魔法方法,只有在 __str__ 魔法方法没有定义时候,才会调用 __repr__ 魔法方法
而且 __repr__ 主要负责对象被读取时候的自动调用返回内容,而__str__主要负责 print 函数时候自动调用返回内容
为什么这样的函数可以不用print直接t1得出总共运行了多少时间?repr和str的顺序不应该倒过来吗才对嘛?
因为这个类定义了 __repr__ 魔法方法,所以你调用实例对象 t1 的时候会自动调用 __repr__ 魔法方法
而这个 MyTimer 类中,__repr__魔法方法被 __str__赋值了,所以说返回值是和 魔法方法__str__ 返回的一样
也就是这里,print 时候会自动调用 __str__ 方法,和你不print 直接 t1 调用了 __repr__方法效果是一样的
因为 __repr__ 魔法方法被赋值为__str__魔法方法的返回值了,所以这里如果你将其倒过来才是错误的
|
|