前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测开之《__repr__和__str__方法的使用》

测开之《__repr__和__str__方法的使用》

作者头像
清菡
发布2021-10-13 11:17:56
4100
发布2021-10-13 11:17:56
举报
文章被收录于专栏:清菡软件测试清菡软件测试

文章总览图

使用str函数或者print打印对象时会优先触发str方法,没定义str方法的情况下,会再去找repr方法,如果都没有,那么就会去找父类的str方法。

如果父类没有str方法,会找父类的repr方法,如果继承object的话,object里面肯定有str方法的。除非是继承一个自己定义的类。

在交互环境下输入对象和直接通过repr这个内置函数处理对象的时候,它只会触发repr方法,如果repr方法不存在,会找父类的repr方法,不会去找str方法。

repr方法是str方法的备胎。但是repr方法不能拿str方法做备胎。父类是第二轮备胎。

一、__str__方法

通过print打印的时候,str被触发了。通过str函数调用的时候,str也被触发了。

用内置函数format把这个对象传进去。它也能触发。

这个print(m)打印出来它返回的内容。

str方法通过3种情况会被触发:

1.通过print去打印,2.通过str这个内置函数去处理它的时候就把它转换成字符串,转换成字符串,这个return self.name地方返回的就是个字符串。str返回的必须是字符串。

3.通过format格式化内置函数处理的时候同样也会触发。

代码语言:javascript
复制
class MyClass(object):
    def __init__(self,name):
        self.name=name


    def __str__(self):
        print("---str--触发了--")
        return self.name

    def __repr__(self):
        print("__repr__被触发")
        print("hahaha")

m=MyClass("清菡")
print(m)
str(m)
format(m)

二、__repr__方法

repr方法除了在交互环境下会被触发,还有一种情况会被触发。

报错了,提示repr返回的不是个字符串,是个None。必须返回字符串。

假设没写这2个方法的时候,返回的是个对象:

如果自己没写,默认用的是object的str方法,看源码:

那么这里返回的就是这个对象。

print打印是由str方法决定的,交互环境下是由repr方法决定的。

代码语言:javascript
复制

class MyClass(object):
    def __init__(self,name):
        self.name=name


    # def __str__(self):
    #     print("---str--触发了--")
    #     return self.name
    #
    # def __repr__(self):
    #     print("__repr__被触发")
    #     return '<myClass.object-{}'.format(self.name)

m=MyClass("清菡")
# print(m)
# str(m)
# format(m)
res=repr(m)
print(res)

如果str方法不存在,会去触发repr方法,打印出repr方法的内容:

三、什么使用str方法,什么时候用repr方法?

代码语言:javascript
复制
class MyClass(object):
    def __init__(self,name):
        self.name=name


    def __str__(self):
        print("---str--触发了--")
        return self.name

    def __repr__(self):
        print("__repr__被触发")
        return '<myClass.object-{}'.format(self.name)

m=MyClass("清菡")
print(m)
# str(m)
# format(m)
res=repr(m)
print(res)

str和repr方法都是返回字符串。在str方法里面返回的是字符串,直观的描述信息。

str方法返回内容是给用户看的,返回是直接的描述信息。

repr返回的东西是给程序员看的。程序员能看到是哪个类出来的对象,知道最开始的样子。


清菡软件测试,腾讯云年度最佳作者,非著名软件测试工程师。

公众号 「清菡软件测试」 首发,更多原创文章:清菡软件测试 143+ 原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。

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

本文分享自 清菡软件测试 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章总览图
    • 一、__str__方法
      • 二、__repr__方法
        • 三、什么使用str方法,什么时候用repr方法?
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档