__repr__,被内置函数repr用于把一个对象用"官方"的字符串形式表示出来(终端友好)
    1、值传给eval()来返回一个对象的字符串表示形式
    2、否则返回一个尖括号括起来的字符串,包含了对象类型的名称和附加的信息通常包括对象的名称和地址
    3、一个类可以通过 __repr__方法来控制它的实例返回内容(也就是以上两点都通可以通过__repr__方法来定制)
    4、返回 Unicode 字符串(str 类型)
    
__str__,被str(object) 和内置函数format()和print() 返回一个对象的'非正式'字符串形式(用户友好)
    1、返回一个对象的字符串版本,如果对象没有提供,会返回空字符串,
    2、对于字符串,会返回字符串本身,如果对象没有提供__str__方法,会使用__repr__方法(也就是repr(object))来提供返回值
    3、返回 Unicode 字符串(str 类型)

例子:

这是django query的源码部分,使用__repr__来返回一个对象和查询的数据切片:

    def __repr__(self):
data = list(self[:REPR_OUTPUT_SIZE + 1])
if len(data) > REPR_OUTPUT_SIZE:
data[-1] = "…(remaining elements truncated)…"
return '<%s %r>' % (self.__class__.__name__, data)

注意:这里用到了%r,会返回数据的标准字符串形式,它和%s的区别看下面的例子:

    In [58]: repr(datetime.datetime.now())
Out[58]: 'datetime.datetime(2018, 9, 13, 15, 22, 22, 124128)' In [59]: str(datetime.datetime.now())
Out[59]: '2018-09-13 15:22:26.310367'

再来看下__str__和__repr__的实现:

   In [68]: class example:
...: def __str__(self):
...: return 'str'
...: def __repr__(self):
...: return 'repr'
...: In [69]: a=example() In [70]: print(a)
str In [71]: a
Out[71]: repr In [74]: '{}'.format(a.__str__())
Out[74]: 'str' In [75]: '{}'.format(a.__repr__())
Out[75]: 'repr'

如果对象没有__str__方法,会使用__repr__来代替:

In [76]: class example:
...: def __repr__(self):
...: return 'repr'
...: In [77]: a=example() In [78]: print(a)
repr In [79]: '{}'.format(a.__str__())
Out[79]: 'repr'

所以如果我们只实现两个中的一个的话,只需要写__repr__就可以了
    
    参考:
    https://docs.python.org/3/reference/datamodel.html
    https://docs.python.org/3/library/functions.html#repr
    https://docs.python.org/3/library/stdtypes.html#str
    https://github.com/django/django/blob/master/django/db/models/query.py

python中的 __repr__和__str__的更多相关文章

  1. python 中的 %s,%r,__str__,__repr__

    1.%s,%r的区别 在进行格式化输出时,%r 与 %s 的区别就好比 repr() 函数处理对象与 str() 函数处理对象的差别. %s ⇒ str(),比较智能: %r ⇒ repr(),处理较 ...

  2. python中魔法方法__init__,__str__,__del__的详细使用方法

    1. python中的魔法方法, 类似__init__, __str__等等,这些内置好的特定的方法进行特定的操作时会自动被调用 2. __init__的使用方法 class 类名(object):  ...

  3. raindi python魔法函数(一)之__repr__与__str__

    __repr__和__str__都是python中的特殊方法,都是用来输出实例对象的,如果没有定义这两个方法在打印的时候只会输出实例所在的内存地址 这种方式的输出没有可读性,并不能直观的体现实例.py ...

  4. Python中__repr__和__str__区别

    Python中__repr__和__str__区别 看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): ...

  5. Python中__repr__和__str__区别(转)

    class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...

  6. 浅谈python中__str__和__repr__的区别

    很多时候我们在创建一个类的时候,在终端打印类或者查看的时候一般都不会得到一个太满意的结果 class T: def __init__(self): self.color="red" ...

  7. python中__str__与__repr__

    (1)背景 python中,对于类(自定义类)的实例对象的默认显示既没有太大用处,也不美观.比如: class adder: def __init__(self,value=0): self.data ...

  8. python中__str__与__repr__的区别

    __str__和repr __str__和__repr__都是python的内置方法,都用与将对象的属性转化成人类容易识别的信息,他们有什么区别呢 来看一段代码 from math import hy ...

  9. [转]Python中__repr__和__str__区别

    class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...

随机推荐

  1. 比较 VGG, resnet和inception的图像分类效果

    简介 VGG, resnet和inception是3种典型的卷积神经网络结构. VGG采用了3*3的卷积核,逐步扩大通道数量 resnet中,每两层卷积增加一个旁路 inception实现了卷积核的并 ...

  2. cloudflare 加https、加SSL(加CF处理)实操流程

    建站过程中,少不了SSL证书等cf添加操作,cf,即cloudflare的简写 首先,点击如图“Add site”,弹出输入框后,填写已在如阿里云.goDaddy.freedom等域名平台购买的域名: ...

  3. PowerTeam--Alpha阶段个人贡献分及转会人员

    PowerTeam--Alpha阶段个人贡献分 我们的团队共有6人,总分300分. 经团队成员通过个人申请以及组内投票的方式,最终的等级评定如下面的等级评定矩阵所示:   β1 β2 β3 γ1 γ2 ...

  4. 第一次spring,第三天。

    陈志棚:界面跳转与框架 李天麟:游戏界面ui 徐侃:算法代码的设计 由于队员要回家,我们讨论后,在校的队员先完成自己的任务,待回来的队员完成后在开会讨论,我们的最终结果.

  5. struts2中的方法的调用

    转载:http://blog.csdn.net/hephec/article/details/41808585 在Struts2中方法调用概括起来主要有三种形式: 第一种方式:指定method属性 & ...

  6. servlet编码乱码问题

    继承HttpServlet 重写doGet(HttpServletRequest req,HttpServletResponse resp),doPost()方法 post提交时: protected ...

  7. Alpha发布评价

    1.奋斗吧兄弟组 食物链系统 是一个比较成熟的工具,可以应用于生物课程的辅助讲解,具有很强的软件目的性和实用性. 2.Newbee 俄罗斯方块 因为选了很经典的游戏,所以在创新上下了一定功夫,可是没有 ...

  8. RocketMQ 事务消息

    RocketMQ 事务消息在实现上充分利用了 RocketMQ 本身机制,在实现零依赖的基础上,同样实现了高性能.可扩展.全异步等一系列特性. 在具体实现上,RocketMQ 通过使用 Half To ...

  9. [转帖]Vim编辑器使用方法详解

    Vim编辑器使用方法详解 程序员小新人学习 2018-12-16 12:26:23 转载于https://www.cnblogs.com/libaoliang/articles/6961676.htm ...

  10. Spring MVC的路径匹配规则 Ant-style

    Spring默认的策略实现了 org.springframework.util.AntPathMatcher,即Apache Ant的样式路径,Apache Ant样式的路径有三种通配符匹配方法(在下 ...