python技巧

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

上一篇下一篇

猜你喜欢

热点阅读