python中__str__方法和__repr__方法的使用和区别

参考链接: 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__方法中...
>>>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值