python中两个魔术方法 __repr__和__str__

repr() 和 str() 的区别

  • str()
    1 使用str()函数时, 才调用__str_ __
    2 使用print()函数时
    3 str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。
  • repr()
    1 使用repr()时,才调用___repr_ __
    2 在交互式控制台(即:>>)或调试程序(即Debug运行代码时)
    3 repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用
class A(object):pass
a = A()
>>> a
<__main__.A object at 0x000002E26B4D89E8>
>>> str(a)
'<__main__.A object at 0x000002E26B4D89E8>'
>>> repr(a)
'<__main__.A object at 0x000002E26B4D89E8>'
>>> print(a)
<__main__.A object at 0x000002E26B4D89E8>
>>> print(str(a))
<__main__.A object at 0x000002E26B4D89E8>
>>> print(repr(a))
<__main__.A object at 0x000002E26B4D89E8>

上面显示的内容是由于类的特殊方法(没有自定义str和repr时), 在print()和直接运行实例a的时候回打印字符串。就会出现上面的结果。

 class A(object):
     def __repr__(self):
             return '这是__repr__'
     def __str__(self):
             return '这是__str__'
>>> a                  
这是__repr__
>>> repr(a)
'这是__repr__'
>>> str(a)
'这是__str__'
>>> print(a)
这是__str__
class A(object):
	def __str__(self):
	return '这是__str__'
a = A()
>>> a
<__main__.A object at 0x000002E26B4D89B0>
>>> repr(a)
'<__main__.A object at 0x000002E26B4D89B0>'
>>> str(a)
'这是__str__'
>>> print(a)
这是__str__
class A(object):
	def __repr__(self):
		return '这是__repr'
>>> a
这是__repr__
>>> repr(a)
'这是__repr__'
>>> str(a)
'这是__repr__'
>>> print(a)
这是__repr__
总结:如果一个对象没有__str__函数,python又需要调用它时,解释器就会__repr__作为代替,

repr(object)官方文档
repr(object) 返回包含对象的可打印表示形式的字符串

1 尝试生成这样一个字符串,其结果绝大多数情况下(不是所有)可以通过内建函数eval(重新得到该对象,即obj==eval(repr(obj))这个等式是成立的。
2 否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址)
3 类可以通过定义__repr__()方法来控制这个函数返回给它的实例的内容。

str() 返回包含对象的可打印表示形式的字符串
1 尝试生成这样一个字符串,结果不可以通过eval()可重新生成同样的对象

a = 'hello'
>>a
'hello'
>>print(a)
hello
>>str(a)           #字符串本身还是字符串
'hello'
>>print(str(a))
hello
>>repr(a)
"'hello'"
>>print(repr(a))
'hello'

https://blog.csdn.net/sinat_41104353/article/details/79254149
https://blog.csdn.net/WIinter_FDd/article/details/78063985

猜你喜欢

转载自blog.csdn.net/qq_29232389/article/details/83104672