python中的repr_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 '' % (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]: classexample:
...: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]: classexample:
...: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_python中的 __repr__和__str__相关推荐
- python中魔法方法repr_Python的两个魔法方法:__repr__和__str__
目录 例子 关系 使用 官方文档 参考 __repr__ 和 __str__ 是 Python 的两个魔法方法(Magic/Special method),更多魔法方法可以参考 A Guide to ...
- python中repr_python中__str__和__repr__的区别
__str__是在str()函数被使用,或是在print函数打印一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好. 如果只想实现这两个特殊方法中的一个,__repr__是更好的选择,因为如 ...
- python中repr_Python中的repr()函数
Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数. 函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式. 在python的官方AP ...
- Python(私有变量)类中的特殊方法
2019独角兽企业重金招聘Python工程师标准>>> 类中的特殊方法 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的索引操作(就像列表和元 ...
- Python 3.7.1 中 namedtuple 具名元组基本用法详解
Python 3.7.1 中 namedtuple 具名元组基本用法详解 转载请注明出处:https://blog.csdn.net/jpch89/article/details/84645251 文 ...
- 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图
使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图 1. EoN是什么 2. 安装 3. 效果图 4. 源代码 4.1 源码 4.2 源码 参考 写这篇博客源于博友的提问 ...
- 使用Python,OpenCV在视频中进行实时条形码检测
使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...
- 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...
关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...
- python缩进在程序中长度统一且强制使用_Python习题纠错1
February, 1991 0.9.1 2.Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例). Python缩进在程序中长度统一且强制使用. 3.IPO:Input Proces ...
最新文章
- 各种函数调用约定及浮点数传参
- DeepMind 的新强化学习系统,是迈向通用人工智能的一步吗?
- R语言进行缺失值填充(Filling in missing values):使用R原生方法、data.table、dplyr等方案
- java中hashcode()和equals()的详解[转]
- 2019 Multi-University Training Contest 1 - 1004 - Vacation - 二分 - 思维
- Python3学习笔记(2)——递归函数
- PL/SQL编程基本概念
- LoRa技术实现水表抄表远距离无线传输方案的应用
- #JAVA# 判断从键盘输入的字符串是否为回文
- Asp.Net MVC及Web API添加身份验证及错误处理的过滤器
- 图解 利用vue-cli 脚手架创建项目
- VB 在浏览器中打开指定网址
- Norton Internet Security 序列号提取(卡饭)
- Excel 某招聘网站职位分析项目
- 数仓搭建 DWT 层
- 关于MySQL索引面试题的6连炮!招架的住吗?
- ALLHIC使用 | HiC辅助基因组组装(三)
- Python入门到精通(4):关系与逻辑表达式
- 使用el-dialog时,报错“Unknown custom element:<el-dialog> did you register the component correctly?...make
- IE7、IE6和火狐兼容性问题
热门文章
- 【内联函数】inline关键字的作用与内联函数的特性
- (一百三十五)Android O探索WLAN扫描(WIFI SCAN ALWAYS)
- C语言__bitwise宏定义
- 计算机c语言lms算法,lms算法(毕业论文).doc
- java实现809*两位数=800*两位数+9*两位数,求出两位数的值。其中8*两位数的结果为两位数,9*两位数的结果为三位数
- 深圳软件测试培训:简述关系型数据库和非关系型数据库
- 如何给卫生间的墙砖打孔,避免瓷砖开裂?
- 格局决定结局,九种职场高效思维你都有吗
- OpenStack搭建私有云一:认证服务
- 考研英语 词根词缀单词81-88