Python中__repr__和__str__的区别
Python有一个内置的函数叫repr,它通过__repr__这个特殊方法来得到一个对象的字符串表现形式。如果类中既没有实现__repr__,也没有实现__str__,这时我们在控制台打印一个类对象时,得到的字符串可能是一个内存地址,如<*** object at 0x10e100070>。
一般来说,__repr__和__str__的所返回的字符串应该准确、无歧义。这两个内置方法的区别在于,__str__是在str()函数被使用或者用print()函数打印一个对象时才被调用。
如果你只想实现这两个方法中的一个,__repr__是更好的选择,因为如果一个对象没有__str__函数,而Python又要调用它的时候,Python解释器会默认用__repr__作为替代。
代码演示:
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __repr__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
def __str__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
Console output:
>>> from vectorClass import Vector
>>> myVector = Vector(3, 4)
>>> myVector
Vector(3, 4)
>>> print(myVector)
Vector(3, 4)
>>> str(myVector)
'Vector(3, 4