首先我们来举个例子,定义一个长方行类Cuboid,长为x,宽为y,高为z

class Cuboid:

    def __init__(self, x = 3, y = 1, z = 2):
self.x = x
self.y = y
self.z = z

默认长为3,宽为1,高为2,让我们试图打印一下这个类

print(Cuboid())

控制台可能会输出:

<__main__.Cuboid object at 0x0000025EE2A9AA90>

但是如果在类种实现__repr__或者__str__如下

class Cuboid:

    def __init__(self, x = 3, y = 1, z = 2):
self.x = x
self.y = y
self.z = z def __repr__(self):
return 'Vector(%r, %r, %r)'%(self.x, self.y, self.z) print(Cuboid())

或者

class Cuboid:

    def __init__(self, x = 3, y = 1, z = 2):
self.x = x
self.y = y
self.z = z def __str__(self):
return 'Vector(%s, %s, %s)'%(self.x, self.y, self.z) print(Cuboid())

输出结果都将是

Vector(3, 1, 2)

也就是说repr与str都是python的内置函数,他们能把一个对象用字符串的形式表达出来,这就是字符串表达形式。repr,str分别是通过__repr__和__str__这两个特殊方法来实现的。

区别:

__repr__和__str__的区别在于,后者是通过str()函数被使用,或者说是只用print打印一个对象时才会别调用。

如果在一个对象中只想保留两者中的一个,那么最好是__repr__,因为当一个对象没有__str__,而python有需要调用它时,往往会用__repr__来替换__str__。

更多大牛解答:

https://stackoverflow.com/questions/1436703/difference-between-str-and-repr

import datetime

now = datetime.datetime.now()

print(str(now))
#输出
2018-07-20 19:02:59.546306 print(repr(now))
#输出
datetime.datetime(2018, 7, 20, 19, 2, 59, 546306)

__repr__具有明确无误性,面向开发人员,而__str__具有可读性,面型用户。

上面长方体类中的%r与%s也是一样

在一些情况下

print(It is '%s' % 7)
print(It is '%r' % 7)
print(It is '%d' % 7)

三种输出是一样的

但是下面情况

import datetime
d = datetime.date.today()
print( "%s" % d )
#输出
2018-07-20 19:02:59.546306 print ( "%r" % d )
#输出
datetime.datetime(2018, 7, 20, 19, 2, 59, 546306)

%r打印时能够重现它所代表的对象,因此可以表达的更清楚正确。

总结一句话就是

__str__()魔法方法与print()输出函数搭配,并且返回值只能为一个字符串类型

__repr__()其返回值是在交互式解释中起作用

__repr__与__str__的更多相关文章

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

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

  2. Python中__repr__和__str__区别

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

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

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

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

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

  5. Python面试题之Python中__repr__和__str__区别

    看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): self.data = value >> ...

  6. Python3中__repr__和__str__区别

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

  7. class类 __repr__ 与__str__

    >>> class Student(object):... def __init__(self, name):... self.name = name... def __str__( ...

  8. python中的 __repr__和__str__

    __repr__,被内置函数repr用于把一个对象用"官方"的字符串形式表示出来(终端友好)    1.值传给eval()来返回一个对象的字符串表示形式    2.否则返回一个尖括 ...

  9. Python中的魔法函数__repr__和__str__的实质性区别

    str 和 repr 方法:是自定义类的字符串描述,这两种都是比较 Pythonic 的方式去控制对象转化为字符串的方式. 调用这两个方法,返回的都是字符串.但是这两个方法又有一些区别 ** 1 两种 ...

随机推荐

  1. 在MySQL Workbench查看表,表结构,索引,函数,存储过程,触发器,重连

    表 表结构 索引 触发器 存储过程 函数 重新连接 出现Error Code: 2006 MySQL server has gone away时

  2. 遗忘Windows Server 2008R2密码的处理方法

    遗忘Windows Server 2008R2的处理方法 有的时候,我们会由于各种原因忘掉了服务器密码,比如服务器太多,太杂什么的,或直接是被人黑掉了,这个时候我们想要登录,发现我们已经没有办法了,其 ...

  3. Centos 7 开启BBR

    # 升级内核 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elr ...

  4. (转)30 个实例详解 TOP 命令

    原文:http://blog.jobbole.com/112873/?utm_source=blog Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服 ...

  5. Intent的那些事儿

    请原谅我用这么文艺的标题来阐释一颗无时无刻奔腾着的2B青年的心.可是今天要介绍的Intent绝不2B,甚至在我看来,或许还有些许飘逸的味道,至于飘逸在哪里呢?那我们就好好来剖析剖析Intent和它的好 ...

  6. JavaScript -- Table-方法

    -----049-Table-方法.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=&quo ...

  7. 《松本行弘的程序世界》读书笔记(上)——面向对象、程序块、设计模式、ajax

    1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的 ...

  8. 27-hadoop-hbase安装

    hbase的安装分为单机模式和完全分布式 单机模式 单机模式的安装很简单, 需要注意hbase自己内置一个zookeeper, 如果使用单机模式, 那么该机器的zookeepr不可以启动 1, 添加j ...

  9. Visual Studio自带的的Developer Command Prompt对话框

    简单了解Visual Studio的Developer Command Prompt VS2008的命令为:Visual Studio 2008 Command Prompt 目录是: 其详细信息如下 ...

  10. ADNI数据和样例

    ADNI临床数据集: 由各个学科的临床信息组成,包括招募.人口统计特征.体格检查和认知评估数据 所收集的临床数据: 基因数据: ILLUMINA SNP基因分型检测 ADNI的一个关键目标就是为研究人 ...