Python中__str__和__repr__的区别 电玩女神 2022-11-15 15:57 152阅读 0赞 Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是“字符串表示形式”。repr就是通过`__repr__`这个特殊方法来得到一个对象的字符串表示形式。如果没有实现`__repr__`,当我们再控制台里打印一个变量的实例时,得到的字符串可能会是`<__main__.Object at 0x14af07dbe80>`,这个表示的是打印的对象,以及对象的内存地址 现在让我们看看`__str__`和`__repr__`这两个方法有什么区别 **首先定义一个类** class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y def __str__(self): return 'str Vector(%s, %s)' % (self.x, self.y) 然后我们在控制台上打印这个类的对象实例 >>> Vector(1, 2) <__main__.Vector at 0x14af07dbe80> >>> str(Vector(1, 2)) 'str Vector(1, 2)' >>> print(Vector(1, 2)) str Vector(1, 2) 从上面的例子我们可以看到,当把变量的实例输入到控制台,会打印出对象的类型和对象的地址,当把对象作为参数传给str或者print方法,则会调用对象的`__str__`方法 现在,我们删除原来的`__str__`方法,加上`__repr__`方法,再在控制台做一样的操作,看看会有什么不同 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y def __repr__(self): return 'repr Vector(%s, %s)' % (self.x, self.y) 重复之前打印Vector对象操作 >>> Vector(1, 2) repr Vector(1, 2) >>> str(Vector(1, 2)) 'repr Vector(1, 2)' >>> print(Vector(1, 2)) repr Vector(1, 2) 我们可以看到,实现我们没有实现`__str__`方法,但在调用str()的时候,str()会自动调用`__repr__`方法,并且在控制台输入对象实例的时候,出来的不再是对象类型和内存地址,而是打印我们所希望表达的对象信息 最后,我们在Vector类中加上`__str__`和`__repr__`方法 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y def __str__(self): return 'str Vector(%s, %s)' % (self.x, self.y) def __repr__(self): return 'repr Vector(%s, %s)' % (self.x, self.y) 重复之前的操作 >>> Vector(1, 2) repr Vector(1, 2) >>> str(Vector(1, 2)) 'str Vector(1, 2)' >>> print(Vector(1, 2)) str Vector(1, 2) 可以知道,当把对象作为参数传入print()时,会自动调用对象的`__str__`方法,但是当`__str__`方法不存在时,则会调用`__repr__`方法。所以,如果你只想实现这两个特殊方法中的一个,建议还是选择`__repr__`方法。
还没有评论,来说两句吧...