微信公众号: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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




