美文网首页
__str__ 与 __repr__ 的区别

__str__ 与 __repr__ 的区别

作者: juriau | 来源:发表于2018-09-30 19:13 被阅读2次
import datetime

datetime.datetime.now()
>>> datetime.datetime(2018, 9, 30, 18, 50, 35, 860171)

print(datetime.datetime.now())
>>> 2018-09-30 18:50:41.618557

print(repr(datetime.datetime.now()))
>>> datetime.datetime(2018, 9, 30, 18, 56, 11, 277455)

print(str(datetime.datetime.now()))
>>> 2018-09-30 18:50:41.618557

总结:

1、__repr__可以在交互环境中直接输出,而__str__必须是print(),或者str()。
2、__repr__返回结果应更准确,用于程序员调试,而__str__返回结果可读性强,用于用户友好显示。


# 重构__repr__
class TestRepr():
    def __init__(self, data):
        self.data = data
    def __repr__(self):
        return 'TestRepr(%s)' % self.data

>>> tr = TestRepr('5')
>>> tr
TestRepr(5)
>>> print(tr)
TestRepr(5)
# 重构__str__
calss TestStr():
    def __init__(self, data):
        self.data = data
    def __str__(self):
        return '[Value: %s]' % self.data

>>> ts = TestStr('5')
>>> ts
<__main__.TestStr at 0x7fa91c314e50>
>>> print(ts)
[Value: 5]
## 重构__str__ 和__repr__
class Test():
    def __init__(self, data):
        self.data = data
    def __repr__(self):
        return 'Test(%s)' % self.data
    def __str__(self):
        return '[Value: %s]' % self.data

t = Test('5')
t
>>>> Test(5)
print(t)
>>>> [Value: 5]

总结:同时重构__str____repr__时,print()输出时__str__会覆盖__repr__,即 在交互环境直接输出时自动调用__repr__,而在print()输出时自动调用__str__

相关文章

网友评论

      本文标题:__str__ 与 __repr__ 的区别

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