__repr__ 与__str__区别

简而言之,这两者之间的区别主要在于一个面向程序,一个面向程序员。
举一个很简单的例子:当我们经常需要检测一个变量是否绑定了我们需要的类的时候,会直接输出该类(比如print(变量名))。该方法输出的时候通常情况格式是这样的:<main.T1 object at 0x000001F09E900AC8>,返回该类的类名和存储的内存位置。但是这样我们可读性并不高,此时可以通过重写__repr__ 与__str__使输出变得更加的清晰。
repr__主要面向程序,最直接的使用时:在使用python原生编辑器的时候,直接输入变量名,会调用该方法。如果用print()加变量名,则会先调用__str__,找不到才会调用repr。

函数如果找不到这两个方法会沿着类向上找父类要,直到找到基类object的这两个方法。
话不多说,看例子就明白了(其实这俩功能都差不多),例子如下:

>>> class T1(object):
    def __init__(self,myname):
        self.myname=myname
    def __repr__(self):
        return "repr:T1:%r"%self.myname
    def __str__(self):
        return "str:T1:%s"%self.myname

>>> x=T1("test1")
>>> x
repr:T1:'test1'
>>> print(x)
str:T1:test1
>>> class T2(object):
    def __init__(self,myname):
        self.myname=myname
    
    def __str__(self):
        return "str:T2:%s"%self.myname

>>> y=T2("TEST2")
>>> y
<__main__.T2 object at 0x000001F09E900AC8>
>>> class T3(object):
    def __init__(self,myname):
        self.myname=myname
    def __repr__(self):
        return "repr:T3:%r"%self.myname

    
>>> z=T3("test3")
>>> z
repr:T3:'test3'
>>> 

猜你喜欢

转载自blog.csdn.net/weixin_36179862/article/details/84256925