参考链接: Python官方文档:object.repr(self)
参考链接: Python官方文档:object.str(self)
以下内容来自Python官方文档:
**两者区别**
object.__repr__(self)
由 repr() 内置函数调用以输出一个对象的“官方”字符串表示。
如果可能,这应类似一个有效的 Python 表达式,
能被用来重建具有相同取值的对象(只要有适当的环境)。
如果这不可能,则应返回形式如 <...some useful description...> 的字符串。
返回值必须是一个字符串对象。
如果一个类定义了 __repr__() 但未定义 __str__(),
则在需要该类的实例的“非正式”字符串表示时也会使用 __repr__()。
此方法通常被用于调试,
因此确保其表示的内容包含丰富信息且无歧义是很重要的。
object.__str__(self)
通过 str(object) 以及内置函数 format() 和 print() 调用
以生成一个对象的“非正式”或格式良好的字符串表示。
返回值必须为一个 字符串对象。
此方法与 object.__repr__() 的不同点在于
__str__() 并不预期返回一个有效的 Python 表达式:
可以使用更方便或更准确的描述信息。
内置类型 object 所定义的默认实现会调用 object.__repr__()。
下面展示 代码:test.py
class Person(object):
def __init__(self,name):
self.name = name
# def __repr__222(self):
def __repr__(self):
return self.name + "正在执行__repr__方法中..."
# def __str__333(self):
def __str__(self):
return self.name + "正在执行__str__方法中..."
p1=Person('甲')
p2=Person('乙')
a=[p1,p2]
print(p1) # 会优先执行__str__方法,如果没有定义该方法则会执行__repr__方法
print(p2) # 会优先执行__str__方法,如果没有定义该方法则会执行__repr__方法
print("##"*10)
print(a) # 会优先执行__repr__方法,如果没有定义该方法则会执行预定义的__repr__方法
控制台输出:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\Users\chenxuqi\Desktop\新建文件夹> & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.9.114305\pythonFiles\lib\python\debugpy\launcher' '62539' '--' 'c:\Users\chenxuqi\Desktop\新建文件夹\test.py'
甲正在执行__str__方法中...
乙正在执行__str__方法中...
####################
[甲正在执行__repr__方法中..., 乙正在执行__repr__方法中...]
PS C:\Users\chenxuqi\Desktop\新建文件夹>
python shell下的运行:
PS C:\Users\chenxuqi\Desktop\新建文件夹> python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
甲正在执行__str__方法中...
乙正在执行__str__方法中...
####################
[甲正在执行__repr__方法中..., 乙正在执行__repr__方法中...]
>>>
>>>
>>> ppp = Person('林祖泉')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Person' is not defined
>>> ppp = test.Person('林祖泉')
>>> ppp
林祖泉正在执行__repr__方法中...
>>> print(ppp)
林祖泉正在执行__str__方法中...
>>> ppp
林祖泉正在执行__repr__方法中...
>>>