__str__和__repr__的区别
2018-09-06 本文已影响0人
陆_志东
__str__
魔法方法是在print(object)
的时候按照__str__
魔法方法定义的方式打印
__repr__
魔法方法是在交互式环境中,直接输入object
打印的格式
注:
如果你在定义类的时候只定义了__repr__
没有定义__str__
那么print(obj)
的时候也会按照__repr__
的格式打印.
如果同时定义了__repr__
和__str__
,交互式按照__repr__
方式打印,print(obj)
按照__str__
方式打印.
也就是说当__str__
不存在的时候print
会去找__repr__
; 一旦__str__
定义了,print
就会按照__str__
的方式打印.
重要提醒
:无论是 str
还是 repr
函数返回的都是字符串类型,不能是其他类型
代码示例:
pycharm运行 和 终端运行 演示__repr__
test.py文件
class test:
def __init__(self):
pass
def __repr__(self):
return "{}".format("haha")
# pycharm运行
t = test()
print(t)
# 终端运行
In [3]: class test:
...: def __init__(self):
...: pass
...:
...: def __repr__(self):
...: return "{}".format("haha")
...:
In [4]: t = test()
In [5]: t
Out[5]: haha
In [6]: print(t)
Out[6]: haha
pycharm 运行和终端运行演示 __str__
class test:
def __init__(self):
pass
def __repr__(self):
return "{}".format("haha")
def __str__(self):
return "{}".format("heihei")
t = test()
print(t)
>>heihei
# 终端
In [7]: class test:
...: def __repr__(self):
...: return "{}".format("haha")
...:
...: def __str__(self):
...: return "{}".format("heihei")
...:
In [8]: t = test()
In [9]: t
Out[9]: haha
In [10]: print(t)
Out[10]: heihei
总结:
开发的时候如果想要正确的按照自己的想法打印还是使用__str__
,不要使用__repr__
,因为你有时候也不确定别人会不会给你加一个__str__
方法,如果这个时候你使用的是__repr__
就悲剧了