__str__和__repr__的区别

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 9,712评论 4 16
  • 基础语法 运行 Python 交互式解释器 在命令行窗口执行python后,进入 Python 的交互式解释器。 ...
    小天真_5eeb阅读 5,241评论 0 36
  • 坐高铁回上海,乘警安排坐到了餐车的座椅上。过了会儿,有对小情侣过来,问我旁边的位置是否有坐人,我说没有的,你们可以...
    大薇薇薇薇阅读 1,891评论 2 1
  • 有时候真想知道什么成熟? 我总爱告诉别人,所谓成熟就是腐朽的开始。 腐朽则意味着衰老的启动。 我也不知道这个观点对...
    微00阅读 2,615评论 0 0
  • 小小的胶泥球放在抽屉里,转眼变成了毛茸茸的仓鼠跳了出来。 一只,两只,三只…… 我想:变一只猫该多好呀! 于是,“...
    树丫丫阅读 1,634评论 0 0

友情链接更多精彩内容