默认实现是无用的
Python的默认实现往往是非常好用的,但是在这个例子中,如果有__repr__
的默认实现则会变为:
return "%s(%r)" % (self.__class__, self.__dict__)
这将会非常危险,如果有对象之间的相互引用,则会陷入无限的递归中,当然,Python有一个默认实现是如果__repr__
被定义了,但是__str__
没有,则会实现为__str__=__repr__
,这意味简单来说,你实现的每一个对象都应实现方法__repr__
,而__str__
是可选的,除非你希望有一个比较好的print效果。
__repr__
的目标是准确
任何重要系统都会有日志系统,Python记录日志是非常简单的,一般情况下会封装为:
log(INFO, "I am in the weird function and a is", a, "and b is" , b, "but i got a null C - using default", default_c)
用户通常需要为每一个对象实现repr方法,这样这种记录日志的方法的就可以工作了。
`str``的目标是可读
具体来说,它不是为了准确,比如str(3)==str("3")
,同样地,当你实现IP地址时,可以使字符串表示为“192.168.1.1”,如果是实现一个日期则表示为"2020/4/12 14:32:23"更合适。它的目标是让用户而非开发者更可读
总结
在你实现任何的类中实现__repr__
方法,如果为了提高可读性则可以实现__str__
方法
网友评论