美文网首页
Python中__str__和__repr__的区别

Python中__str__和__repr__的区别

作者: 吃西瓜的棕熊 | 来源:发表于2022-03-12 11:02 被阅读0次

    默认实现是无用的

    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__方法

    相关文章

      网友评论

          本文标题:Python中__str__和__repr__的区别

          本文链接:https://www.haomeiwen.com/subject/czekdrtx.html