• python __str__() 和 __repr__()是干啥的


     

     

    1. 没定义__str__() print的时候得不到自己想要的东西

     

    类默认转化的字符串基本没有我们想要的一些东西,仅仅包含了类的名称以及实例的 ID (理解为 Python 对象的内存地址即可)。虽说这总比没有好,但确实是没什么用处啊。

    所以,我们可能会手动打印对象的一些属性或者是在类里自己实现一个方法来返回我们需要的信息

    2.使用 __str__ 实现类到字符串的转化

    3.另一个就是 __repr__ 方法。后者的工作方式与前者类似,但是它被调用的时机不同

     另外,列表以及字典等容器总是会使用 __repr__ 方法。即使你显式的调用 str 方法,也是如此。

    如果我们需要显示的指定以何种方式进行类到字符串的转化,我们可以使用内置的 str() 或 repr() 方法,它们会调用类中对应的双下划线方法。

    4.__str__ 和 __repr__ 的差别是什么

    __str__ 和 __repr__ 的差别究竟在哪里,它们的功能都是实现类到字符串的转化,它们的特定并没有体现出用途上的差异。

     

    因此,我们有个初步的答案。

    __str__ 的返回结果可读性强。也就是说,__str__ 的意义是得到便于人们阅读的信息,就像上面的 '2018-04-03' 一样。

    __repr__ 的返回结果应更准确。怎么说,__repr__ 存在的目的在于调试,便于开发者使用。细心的读者会发现将 __repr__ 返回的方式直接复制到命令行上,是可以直接执行的。

    上面应该就是这两个方法的意义所在吧

    5.自己写class的时候要加__repr__

    如果你没有添加 __str__ 方法,Python 在需要该方法但找不到的时候,它会去调用 __repr__ 方法。因此,我推荐在写自己的类的时候至少添加一个 __repr__ 方法,这能保证类到字符串始终有一个有效的自定义转换方式。

    参考:http://baijiahao.baidu.com/s?id=1596817611604972751&wfr=spider&for=pc

  • 相关阅读:
    [day002]剑指 Offer 09. 用两个栈实现队列
    [day003]718. 最长重复子数组
    [linux]关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    96. 不同的二叉搜索树
    91. 解码方法
    [动态规划]64. 最小路径和
    62.不同路径
    【Java】list根据某一条件进行分组
    【Java】批量生成小程序参数码并打包下载
    【Docker】使用docker制作libreoffice镜像并解决中文乱码问题
  • 原文地址:https://www.cnblogs.com/baxianhua/p/10768393.html
Copyright © 2020-2023  润新知