Demo
class Vector(object):
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __repr__(self):
return 'Vector(%r, %r)-repr' % (self.x, self.y)
def __abs__(self):
return 'Vector(%r, %r)-str' % (self.x, self.y)
Result
Comment
- __repr__()方法是object类提供的方法,而所有的Python类都是object类的子类,因此所有的Python对象都具有__repr__() 方法。所以如果需要将任何对象与字符串进行连接时,都可先调用__repr__()方法将对象转为字符串,再将字符串连接在一起。
- __repr__()之所以特殊,是因为它是一个“自我描述”的方法,该方法通常实现场景是:当开发人员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具有的状态信息。
- object类提供的__repr__()方法总是返回该对象实现类的“类名+object at + 内存地址”值,这个返回值并不能真正实现“自我描述”的功能,因此如果用户需要自定义类能实现“自我描述”的功能,就必须重写__repr__()方法。
- 一般来说__str__()的可读性更强,而__repr__()的返回结果更具有准确性,更加的适合开发者。
- 对于开发者而言,在实现类时,建议重写__repr__()函数!