前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python笔记70 - Python中__repr__和__str__区别

python笔记70 - Python中__repr__和__str__区别

作者头像
上海-悠悠
发布2021-11-24 10:58:49
3610
发布2021-11-24 10:58:49
举报
文章被收录于专栏:从零开始学自动化测试

前言

Python中__repr____str__使用区别

__repr__ 使用

很多时候我们在创建一个类的时候,在终端打印类的实例,看到的是一个类似于这样的内容:<XXX object at 0x0000000001222E10>

代码语言:javascript
复制
class MyDefined(object):

    def __init__(self):
        self.name = "yoyo"

在终端调试结果

代码语言:javascript
复制
>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<a.MyDefined object at 0x0000015EEEB1F0B8>
>>>

返回的是对象的内存地址,对于初学者看起来很不友善,初学者无法理解返回的内容,于是可以加一个__repr__ 方法

代码语言:javascript
复制
class MyDefined(object):

    def __init__(self):
        self.name = "yoyo"

    def __repr__(self):
        return '<object MyDefined: {}>'.format(self.name)

重新在终端调试

代码语言:javascript
复制
>python
Python 3.6.6 
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<object MyDefined: yoyo>
>>> print(yo)
<object MyDefined: yoyo>

从打印的结果就可以看到返回的是<object MyDefined: yoyo>,这样用户就知道返回的是什么实例对象,便于开发者理解。 __repr__是直接输出对象(面向开发者),方便提供接口给开发者使用,如django里面的ORM查询,返回queryset对象。

__str__ 使用

__str__方法是在print()打印的时候输出给用户看的,面向的是普通的用户,方便用户知道返回的是什么实例对象。

代码语言:javascript
复制
class MyDefined(object):

    def __init__(self):
        self.name = "yoyo"

    def __str__(self):
        return '<object MyDefined: {}>'.format(self.name)

在终端调试

代码语言:javascript
复制
>python
Python 3.6.6 
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<a.MyDefined object at 0x000001A4C133F128>
>>> print(yo)
<object MyDefined: yoyo>
>>>

从结果可以看到直接输入yo,返回的还是object at 0x000,只有print()输出的时候才会打印__str__返回的内容

总结

注意:__str__()方法和__repr__()方法的返回值只能是字符串! __repr____str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向开发者

关于调用两种方法的时机

  • 使用print()时
  • 使用%s和f’{}’拼接对象时
  • 使用str(x)转换对象x时 在上述三种场景中,会优先调用对象的__str__()方法;若没有,就调用__repr__()方法;若再没有,则显示其内存地址。

特别地,对于下面两种场景:

  • 用%r进行字符串拼接时
  • 用repr(x)转换对象x时 则会调用这个对象的__repr__()方法;若没有,则不再看其是否有__str__()方法,而是显示其内存地址。

当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。

参考博客https://www.cnblogs.com/zyyhxbs/p/11184094.html 参考博客https://blog.csdn.net/nanhuaibeian/article/details/86694581

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • __repr__ 使用
  • __str__ 使用
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档