概述:
__ repr __和__str__这两个方法都是用于显示的, __ str__是面向用户的,在调用str()和使用print()输出时调用,而__repr__面向程序员,用于交互模式下提示回应以及repr函数,如果没有使用 _ str _ , 会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
__ repr __ goal is to be unambiguous.
__ str __ goal is to be readable.
python默认对象输出:
调用python默认 __ repr __ 方法, 如果 __ str __ 方法方法没定义, __ repr __ 方法定义了,则 __ str _= __ repr __
return "%s(%r)" % (self.__class__, self.__dict__)
class MyInteger:
def __init__(self, v):
self.data = v
I1 = MyInteger(-100)
print(I1)
<__main__.MyInteger object at 0x7f839f99be80>v
显然python默认的对对象描述的输出是不友好的,一般类中重定义 __ repr __方法,方便调试。
__ repr __:
class MyInteger:
def __init__(self, v):
self.data = v
def __repr__(self):
return 'MyInteger(%r)' % self.data
def __abs__(self):
# 此方法用于制定abs(obj)函数取值时返回的结果
if self.data < 0:
return MyInteger(-self.data) # 用-self.data创建一个新的对象返回回去
I1 = MyInteger(-100)
print(I1) # 等同与print(str(i1))
I2 = abs(I1)
print(I2)
MyInteger(-100)
MyInteger(100)
MyClass(this=%r,that=%r)" % (self.this,self.that)
细节: