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__
网友评论