Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是“字符串表示形式”。repr就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式。如果没有实现__repr__,当我们再控制台里打印一个变量的实例时,得到的字符串可能会是<__main__.Object at 0x14af07dbe80>,这个表示的是打印的对象,以及对象的内存地址

现在让我们看看__str__和__repr__这两个方法有什么区别

首先定义一个类

class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y def __str__(self):
return 'str Vector(%s, %s)' % (self.x, self.y)

 

然后我们在控制台上打印这个类的对象实例

>>> Vector(1, 2)
<__main__.Vector at 0x14af07dbe80>
>>> str(Vector(1, 2))
'str Vector(1, 2)'
>>> print(Vector(1, 2))
str Vector(1, 2)

  

从上面的例子我们可以看到,当把变量的实例输入到控制台,会打印出对象的类型和对象的地址,当把对象作为参数传给str或者print方法,则会调用对象的__str__方法

 

现在,我们删除原来的__str__方法,加上__repr__方法,再在控制台做一样的操作,看看会有什么不同

class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y def __repr__(self):
return 'repr Vector(%s, %s)' % (self.x, self.y)

  

重复之前打印Vector对象操作

>>> Vector(1, 2)
repr Vector(1, 2)
>>> str(Vector(1, 2))
'repr Vector(1, 2)'
>>> print(Vector(1, 2))
repr Vector(1, 2)

  

我们可以看到,实现我们没有实现__str__方法,但在调用str()的时候,str()会自动调用__repr__方法,并且在控制台输入对象实例的时候,出来的不再是对象类型和内存地址,而是打印我们所希望表达的对象信息

最后,我们在Vector类中加上__str__和__repr__方法

class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y def __str__(self):
return 'str Vector(%s, %s)' % (self.x, self.y) def __repr__(self):
return 'repr Vector(%s, %s)' % (self.x, self.y)

  

重复之前的操作

>>> Vector(1, 2)
repr Vector(1, 2)
>>> str(Vector(1, 2))
'str Vector(1, 2)'
>>> print(Vector(1, 2))
str Vector(1, 2)

  

可以知道,当把对象作为参数传入print()时,会自动调用对象的__str__方法,但是当__str__方法不存在时,则会调用__repr__方法。所以,如果你只想实现这两个特殊方法中的一个,建议还是选择__repr__方法。

  

Python中__str__和__repr__的区别的更多相关文章

  1. python中__str__与__repr__的区别

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

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

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

  3. python中__str__与__repr__

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

  4. Python中type与Object的区别

    Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...

  5. Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif

    Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif 一丶__str__ 和 __repr__ ...

  6. [Python3 填坑] 015 __str__ 与 __repr__ 的区别

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 上例子 2.2 关系与区别 Python 3.7.3 的官方文档 网上看到一个例子,运行了一下 简单地说 1. print( 坑的信息 ...

  7. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  8. Python中的is和==的区别,==判断值是否相等,is判断地址是否一致

    Python中的is和==的区别 Python中的对象包含三要素:id.type.value. 其中id用来唯一标示一个对象,type标识对象的类型,value是对象的值. is判断的是a对象是否就是 ...

  9. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

随机推荐

  1. Java并发(五):并发,迭代器和容器

    在随后的博文中我会继续分析并发包源码,在这里,得分别谈谈容器类和迭代器及其源码,虽然很突兀,但我认为这对于学习Java并发很重要; ConcurrentModificationException: J ...

  2. ubuntu命令收集

    软件操作: - sudo apt-get install xxx 安装软件 - sudo apt-get --purge remove XXX 卸载软件 - sudo apt-get -f insta ...

  3. Mavlink协议理解

    来源:blog.csdn.net/super_mice/article/details/44836585 之前看了mavlink协议,网上关于mavlink的资料不多.本文大概总结了下对mavlink ...

  4. It's the loneliest feeling not to know who you are.

    It's the loneliest feeling not to know who you are.最孤独的感觉莫过于不知道自己是谁.

  5. SqlServer图形数据库初体验

    SQL Server2017新增了一个新功能叫做图形数据库.图形指的拓扑图形,是一些Node表和Edge表的合集,Node对应关系数据库中的实体,比如一个人.一个岗位等,Edge表指示Node之前的关 ...

  6. 梦织未来Windows驱动编程 第06课 驱动对磁盘文件的操作

    代码部分: 实现一个文件C:\\text.txt,并读取写入内容到文件,然后将文件设置为只读,并隐藏文件.代码如下: //MyCreateFile.c //2016.07.22 #include &l ...

  7. linux 命令——ls

    一.  ls命令 ls 命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文 件及文件夹清单. 通过ls 命 ...

  8. Hybris Enterprise Commerce Platform 服务层的设计与实现

    Hybris Enterprise Commerce Platform这个系列之前已经由我的同事,SAP成都研究院Hybris开发团队的同事张健(Zhang Jonathan)发布过两篇文章了.这里J ...

  9. 二叉搜索树(BST)学习笔记

    简介 二叉搜索树(\(Binary\ Search\ Tree\)),简称\(BST\),用于在一个集合中查找元素. 性质 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为 ...

  10. 求最大公约数和最小公倍数_python

    """写两个函数,分别求两个整数的最大公约数和最小公倍数,调用这两个函数,并输出结果.两个整数由键盘输入.""" ''' 设两个整数u和v, ...