Python中__str__和__repr__
2017-08-07 14:57
405 查看
1.repr() 或str() 函数
Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(str出来的值是给人看的字符串,repr出来的值是给机器看的)
>>> import datetime >>> t1=datetime.datetime.now() >>> print(t1) 2017-08-06 21:49:37.490534 >>> print(str(t1)) 2017-08-06 21:49:37.490534 >>> print(repr(t1)) datetime.datetime(2017, 8, 6, 21, 49, 37, 490534) >>>
再看一个例子
>>> print(str(1000L)) 1000 >>> print(repr(1000L)) 1000L
2.特殊方法__str__和__repr__
引用别人的一个例子http://blog.csdn.net/luckytanggu/article/details/53649156class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Test() >>> t <__main__.Test at 0x7fa91c307190> >>> print t <__main__.Test object at 0x7fa91c307190> # 看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址 # 下面我们重构下该类的__repr__以及__str__,看看它们俩有啥区别 # 重构__repr__ class TestRepr(Test): def __repr__(self): return 'TestRepr(%s)' % self.data >>> tr = TestRepr() >>> tr TestRepr(hello, world!) >>> print tr TestRepr(hello, world!) # 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了 # 重构__str__ calss TestStr(Test): def __str__(self): return '[Value: %s]' % self.data >>> ts = TestStr() >>> ts <__main__.TestStr at 0x7fa91c314e50> >>> print ts [Value: hello, world!] # 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了
__repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员。
打印操作会首先尝试str和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
repr用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用str,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
当我们想所有环境下都统一显示的话,可以重构__repr__方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。
相关文章推荐
- Python 中 str 和 repr 的区别
- Python之str()与repr()的区别
- Python repr() 函数和str() 函数
- Python中__repr__和__str__区别
- python str和repr 的区别
- Python--str与repr以及eval的使用方法
- 【再回首Python之美】【类-特殊方法】__str__()和__repr__()的区别和重写覆盖
- python之字符串生成str(),repr()及' '
- python中str()与repr()的区别
- python - __str__ 和 __repr__
- Python之str(),repr(),``
- python知识点: repr()/str()/eval()/exec()/bytes()
- python - __str__ 和 __repr__
- python str与repr的区别
- 飘逸的python - str vs. repr
- python的str()和repr()函数比较
- python 内建函数 str() 和 repr() 的区别
- Python repr() 或str() 函数, 反引号
- python的str()和repr()的区别
- python中str()和repr()区别