类对象特殊方法__str__()
和__repr__()
用于自定义并返回实例对象的字符串表示形式
内置函数str()和repr()都返回对象的字符串表示,其区别在于:
str()的返回值是给用户看的,更加用户友好;
repr()的返回值是给程序开发看的,是为调试服务的;
1、当在交互式命令行中直接打印一个实例对象时
- 如果在实例对象对应的类对象中实现了特殊方法
__repr__()
,会自动调用该方法; - 否则,会打印实例对象对应的类对象在内存中的地址。
>>> class MyClass(object):
... pass
...
>>> mc = MyClass()
>>> mc
<__main__.MyClass object at 0x7f2c301f9470>
>>>
>>> print(mc)
<__main__.MyClass object at 0x7f2c301f9470>
>>>
>>> str(mc)
'<__main__.MyClass object at 0x7f2c301f9470>'
>>>
>>> repr(mc)
'<__main__.MyClass object at 0x7f2c301f9470>'
2、当调用内置函数print打印一个实例对象时
- 如果在实例对象对应的类对象中实现了特殊方法
__str__()
,会自动调用__str__()
方法; - 否则,如果在实例对象对应的类对象实现了特殊方法
__repr__()
,会自动调用__repr__()
方法; - 否则,会打印实例对象对应的类对象在内存中的地址。
>>> class MyClass2(object):
... def __str__(self):
... return '__str__()被调用了'
...
>>> mc2 = MyClass2()
>>>
>>> mc2
<__main__.MyClass2 object at 0x7f2c301f95f8>
>>>
>>> print(mc2)
__str__()被调用了
>>>
>>> str(mc2)
'__str__()被调用了'
>>>
>>> repr(mc2)
'<__main__.MyClass2 object at 0x7f2c301f95f8>'
3、当调用内置函数str创建字符串,并且实参时一个实例对象时
- 如果在实例对象的类对象中实现了特殊方法
__str__()
,在内置函数str的内部会自动调用__str__()
方法; - 否则,如果在实例对象对应的类对象中实现了特殊方法
__repr__()
,在内置函数str的内部会自动调用__repr__()
方法; - 否则,会打印实例对象对应的类对象和实例对象在内存中的地址
>>> class MyClass3(object):
... def __repr__(self):
... return '__repr__()被调用了'
...
>>> mc3 = MyClass3()
>>> mc3
__repr__()被调用了
>>>
>>> print(mc3)
__repr__()被调用了
>>>
>>> str(mc3)
'__repr__()被调用了'
>>>
>>> repr(mc3)
'__repr__()被调用了'
4、当调用内置函数repr创建字符串,并且实参时一个实例对象时
- 如果在实例对象的类对象中实现了特殊方法
__repr__()
,在内置函数str的内部会自动调用__repr__()
方法; - 否则,会打印实例对象对应的类对象和实例对象在内存中的地址
>>> class MyClass4(object):
... def __str__(self):
... return '__str__()被调用了'
... def __repr__(self):
... return '__repr__()被调用了'
...
>>> mc4 = MyClass4()
>>> mc4
__repr__()被调用了
>>>
>>> print(mc4)
__str__()被调用了
>>>
>>> str(mc4)
'__str__()被调用了'
>>>
>>> repr(mc4)
'__repr__()被调用了'
通常__str__()
和__repr__()
实现代码是一样的,因此我们可以将定义的其中一个的方法名赋值给另外一个方法名
#!/usr/bin/python3
class MyClass5(object):
def __str__(self):
return 'xxx'
__repr__ = __str__
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com