python中的 __repr__和__str__
__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__的更多相关文章
- python 中的 %s,%r,__str__,__repr__
1.%s,%r的区别 在进行格式化输出时,%r 与 %s 的区别就好比 repr() 函数处理对象与 str() 函数处理对象的差别. %s ⇒ str(),比较智能: %r ⇒ repr(),处理较 ...
- python中魔法方法__init__,__str__,__del__的详细使用方法
1. python中的魔法方法, 类似__init__, __str__等等,这些内置好的特定的方法进行特定的操作时会自动被调用 2. __init__的使用方法 class 类名(object): ...
- raindi python魔法函数(一)之__repr__与__str__
__repr__和__str__都是python中的特殊方法,都是用来输出实例对象的,如果没有定义这两个方法在打印的时候只会输出实例所在的内存地址 这种方式的输出没有可读性,并不能直观的体现实例.py ...
- Python中__repr__和__str__区别
Python中__repr__和__str__区别 看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): ...
- Python中__repr__和__str__区别(转)
class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...
- 浅谈python中__str__和__repr__的区别
很多时候我们在创建一个类的时候,在终端打印类或者查看的时候一般都不会得到一个太满意的结果 class T: def __init__(self): self.color="red" ...
- python中__str__与__repr__
(1)背景 python中,对于类(自定义类)的实例对象的默认显示既没有太大用处,也不美观.比如: class adder: def __init__(self,value=0): self.data ...
- python中__str__与__repr__的区别
__str__和repr __str__和__repr__都是python的内置方法,都用与将对象的属性转化成人类容易识别的信息,他们有什么区别呢 来看一段代码 from math import hy ...
- [转]Python中__repr__和__str__区别
class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Te ...
随机推荐
- 怎么理解LAXCUS大操作系统系统在云计算体系中的定位
最近一直在做laxcus大数据操作系统的分布式应用开发,因为做得多了,感触也多了.按照云计算三层定义,即iaas(基础设施即服务).paas(平台即服务).saas(软件即服务),laxcus属于pa ...
- (第十二周)新功能WBS
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 新增加的功能:背景音乐 功能 子功能 二级子功能 预计花费时间(小时) 实际花费时间(小时) 背景音乐 界面组 ...
- Notes of Daily Scrum Meeting(12.8)
今日团队任务总结: 团队成员 今日团队工作 陈少杰 使用例子对json数据进行解析 王迪 确定搜索功能的接口 金鑫 对布局文件进行协助修改 雷元勇 开始进行搜索功能的代码实现 高孟烨 按照学长的样本对 ...
- BugPhobia准备篇章:Scrum Meeting工作分析篇
特别说明:此博客不计入正式开发过程的Scrum Meeting篇章,只是工作的基础分析 前端 王鹿鸣.钱林琛撰写初稿 能否前端完成一个页面后就能在本地跑起来进行测试? 能否在前端和后端完成对接后单页面 ...
- 【Alpha】第六次Scrum meeting
今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 今日完成了python的一个template引擎airspeed的使用,并使用该引擎成功跑出一份latex模板替换文件. Issue链接:https ...
- 设置matplotlib画图支持中文显示
1.安装中文字体 git clone https://github.com/tracyone/program_font && cd program_font && ./ ...
- Linux版本CentOS、Ubuntu和Debian的异同
Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本. 商业版本以Redhat为代表,开源社区版本则以debian为代表. #Ubuntu系统 U ...
- [转帖].NET Framework各版本操作系统支持
.NET Framework .NET版本 1.0 1.1 2.0 3.0 3.5 4.0 4.5 完整版本 1.0.3705.0 1.1.4322.573 2.0.50727.42 3.0.4506 ...
- 微信小游戏 项目配置文件 project.config.json
一.项目配置文件project.config.json 小程序开发者工具在每个项目的根目录都会生成一个 project.config.json,在工具上做的任何配置都会写入到这个文件,当重新安装工具或 ...
- maven项目无法读取src/main/java目录下的配置文件解决方法
我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录.但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的map ...