在Pyhton 中,如果想定制化打印出实例对象的信息,那可以使用__str__
和__repr__魔法方法来
定制化显示。
__str__
和__repr__
在Python中,打印一个自定义类的实例对象所显示的信息往往是很不友好的,如下所示:
>>> class Animal():
... def __init__(self,name):
... self.name = name
...
>>> dog = Animal('monkey')
>>> print(dog)
<__main__.Animal instance at 0x0000000003664F88>
__str__
和__repr__
所起的作用就是定制化显示输出信息(你想输出什么就是什么),当然,两者也有区别的,区别如下:
•对于print
和str
内置函数,程序会首先尝试__str__
,如果没有__str__
,则尝试__repr__
,如果没有__repr__
,则选用默认显示。•在交互式回应,repr
函数中__repr__
会被调用,你可以这么认为,__str__
是给用户看的,__repr__
则是给开发者看的. 看下面示例:
>>> class Animal():
... def __init__(self,name):
... self.name = name
... def __str__(self):
... return "i am %s" % self.name
... def __repr__(self):
... return "Animal:name is %s" % self.name
...
>>> dog = Animal('kitty')
>>> dog
Animal:name is kitty
>>> print(dog)
i am kitty
>>> str(dog)
'i am kitty'
>>> repr(dog)
'Animal:name is kitty'
从上面示例可以看出 print
和 str
函数中调用的是 __str__
, 而在交互式响应中 和 repr
函数中调用的是__repr__。