暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

__str__和__repr__

FluentStudy 2018-02-28
211

微信公众号:Semon
如有问题或建议,请公众号留言

__str__和__repr__的区别

相同点:返回值都必须是String

不同点:

  • __str__是给终端用户看的,__repr__方便后台调试和记录日志

  • __str__的目标是可读性,__repr__的目标是准确性

  • 在调用format()方法和print()方法时会调用__str__

  • 当定义了__repr__,没有定义__str__时,对象将表现为__str__ = __repr__


__str__和__repr__示例

例1-两个方法都没有重写时,没有任何的信息输出

>>> class Test:
...    pass
...
>>> t = Test()
>>> print(str(t))
<__main__.Test instance at 0x101a777e8>
>>> print(repr(t))
<__main__.Test instance at 0x101a777e8>


例2-只重写__str__时,调用str()方法会默认调用__str__方法,而因为没有重写__repr__方法,所以repr()方法没有任何信息输出

>>> class Test:
...    def __str__(self):
...            return "str"
...
>>> t = Test()
>>> print(str(t))
str
>>> print(repr(t))
<__main__.Test instance at 0x101a77950>


例3-只重写__repr__,没有重写__str__时,相当于__str__ = __repr__,所以str()方法会调用__repr__方法

>>> class Test:
...    def __repr__(self):
...            return "repr"
...
>>> t = Test()
>>> print(str(t))
repr
>>> print(repr(t))
repr


例4-__repr__和__str__都被重写时,则str()方法调用__str__,repr()方法调用__repr__

>>> class Test:
...    def __str__(self):
...            return "str"
...    def __repr__(self):
...            return "repr"
...
>>> t = Test()
>>> print(str(t))
str
>>> print(repr(t))
repr


例5-在调用format()方法和print()方法时会调用__str__

>>> class Test:
...     def __str__(self):
...             return "str"
...     def __repr__(self):
...             return "repr"
...
>>> t = Test()
>>> print(t)
str
>>> format(t)
'str'
>>> t
repr


例6-__str__的目标是可读性,__repr__的目标是准确性

>>> str("3")
'3'
>>> repr("3")
"'3'"
>>> str(3) == str("3")
True
>>> repr(3) == repr("3")
False


文章转载自FluentStudy,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论