__repr__与__str__
首先我们来举个例子,定义一个长方行类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__的更多相关文章
- [转]Python中__repr__和__str__区别
class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...
- Python中__repr__和__str__区别
Python中__repr__和__str__区别 看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): ...
- raindi python魔法函数(一)之__repr__与__str__
__repr__和__str__都是python中的特殊方法,都是用来输出实例对象的,如果没有定义这两个方法在打印的时候只会输出实例所在的内存地址 这种方式的输出没有可读性,并不能直观的体现实例.py ...
- Python中__repr__和__str__区别(转)
class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...
- Python面试题之Python中__repr__和__str__区别
看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): self.data = value >> ...
- Python3中__repr__和__str__区别
示例: class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t ...
- class类 __repr__ 与__str__
>>> class Student(object):... def __init__(self, name):... self.name = name... def __str__( ...
- python中的 __repr__和__str__
__repr__,被内置函数repr用于把一个对象用"官方"的字符串形式表示出来(终端友好) 1.值传给eval()来返回一个对象的字符串表示形式 2.否则返回一个尖括 ...
- Python中的魔法函数__repr__和__str__的实质性区别
str 和 repr 方法:是自定义类的字符串描述,这两种都是比较 Pythonic 的方式去控制对象转化为字符串的方式. 调用这两个方法,返回的都是字符串.但是这两个方法又有一些区别 ** 1 两种 ...
随机推荐
- mac终端常用命令
1.du #查看文件目录大小 示例:查看DataCenter目录下所有文件/文件夹的大小 everSeeker:DataCenter pingping$ -h .9G ./Books 1.2M ./C ...
- kafka java.rmi.server.ExportException: Port already in use
当你在kafka-run-class.sh中添加了export JMX_PORT=9300 开启了 jmx 后, 在使用 kafka bin/目录下的脚本时会报如下错误: java.rmi.serve ...
- lucene使用与优化
lucene使用与优化 1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿 ...
- python 跨平台获取网卡信息和本机ip地址
笔者在项目中遇到过获取本机网卡ip的例子,利用python库psutil解决了此问题. def get_netcard(): """获取网卡名称和ip地址 "& ...
- IQueryable与IEnumerable
IEnumerable: 从服务器处取回所有数据,在客户端根据过滤条件进行过滤再返回结果. IQueryable: 从服务器处进行过滤,直接返回过滤后的结果.
- Ubuntu 12.04 安装Redis并设置主从复制
今天想在Ubuntu上安装一个Redis服务器并配置Master-Slave,一开始懒得连VPN就查了一些国内的文章,不知道是没有亲自验证过的转载文章,还是版本问题造成的,发现按照步骤都没能成功完成配 ...
- 09-02 java 多态
多态的前提.多态的特点 /* 多态:同一个对象(事物),在不同时刻体现出来的不同状态. 举例: 猫是猫,猫是动物. 水(液体,固体,气态). 多态的前提: A:要有继承关系. B:要有方法重写. 其实 ...
- docker学习实践之路[第二站]nginx镜像实践
上一篇文章中已经成功的拉取的nginx的镜像 在本篇文章中则详细介绍docker利用文件卷.断后映射然后进行nginx的配置. 输入一下命令: docker run -d --name mynginx ...
- android开发学习——day2
简单了解了android stdio的操作方式,今天着手于探究活动(Activity) 了解了基本活动与手动创建活动的方法,了解了onCreate()方法,了解了创建和加载页面布局(layout) 新 ...
- C#:VS2010 由于缺少调试目标"xx.exe",Visual Studio无法开始调试,请生成项目并重试,或者相应地设置OutputPath和AssemblyName属性,使其指向目标程序集的正确位置
解决办法:重置VS2010的环境配置 原文地址:曾是土木人 转载请注明出处:http://www.cnblogs.com/hongfei/p/3813369.html