__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__就悲剧了