鱼C论坛

 找回密码
 立即注册
查看: 1631|回复: 2

[已解决]__str__和__repr__魔法方法何时被调用啊

[复制链接]
发表于 2023-6-22 23:53:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> class C:
    def __init__(self, data):
        self.data = data
    def __str__(self):
        return f'data = {self.data}'
    def __repr__(self):
        return f'C({self.data})'
    def __add__(self, other):
        self.data += other

>>> 
>>> c = C(250)
>>> c
C(250)
>>> print(c)
data = 250

上面的代码重新定义了str和repr方法, 但是不理解在什么情况下调用的str方法(代码中是print(c)), 什么情况下调用的是repr方法(代码中是 c)? 谢谢老师们的指点。
最佳答案
2023-6-22 23:55:07
本帖最后由 isdkz 于 2023-6-22 23:56 编辑

__str__和__repr__是Python中的特殊方法(也称为魔法方法),用于定义对象的字符串表示形式。
__str__方法通常在我们使用print函数或str()函数打印对象时被调用。它应该返回一个易于阅读的对象描述。在代码中,当您调用print(c)时,会自动调用c的__str__方法,并将其返回值打印出来,结果为"data = 250"。

__repr__方法通常在我们调用repr()函数或在交互式解释器中直接键入对象名称时被调用。它应该返回一个能够准确表示对象的字符串。在代码中,当您直接输入c时或使用repr(c)时,会自动调用c的__repr__方法,并将其返回值作为对象的字符串表示形式,结果为"C(250)"。

在实际使用中,__str__的目的是提供一个友好的对象描述,便于阅读,而__repr__的目的是提供一个准确的对象表示形式,便于调试和开发时查看对象内部状态的详细信息。

如果我们不定义__str__方法,而只定义__repr__方法,那么当我们使用print函数打印对象时,Python会调用__repr__方法来表示对象。反之亦然,如果只定义了__str__方法,而没有定义__repr__方法,那么当我们直接输入对象名称或使用repr()函数时,Python会调用__str__方法来表示对象。

总结一下:

  • print函数或str()函数调用对象的__str__方法,返回一个易于阅读的描述。
  • repr()函数或在交互式解释器中直接输入对象名称时,调用对象的__repr__方法,返回一个准确的表示形式。


希望这个解答能够帮助到您!如果您有任何进一步的问题,请随时向我提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-22 23:55:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-6-22 23:56 编辑

__str__和__repr__是Python中的特殊方法(也称为魔法方法),用于定义对象的字符串表示形式。
__str__方法通常在我们使用print函数或str()函数打印对象时被调用。它应该返回一个易于阅读的对象描述。在代码中,当您调用print(c)时,会自动调用c的__str__方法,并将其返回值打印出来,结果为"data = 250"。

__repr__方法通常在我们调用repr()函数或在交互式解释器中直接键入对象名称时被调用。它应该返回一个能够准确表示对象的字符串。在代码中,当您直接输入c时或使用repr(c)时,会自动调用c的__repr__方法,并将其返回值作为对象的字符串表示形式,结果为"C(250)"。

在实际使用中,__str__的目的是提供一个友好的对象描述,便于阅读,而__repr__的目的是提供一个准确的对象表示形式,便于调试和开发时查看对象内部状态的详细信息。

如果我们不定义__str__方法,而只定义__repr__方法,那么当我们使用print函数打印对象时,Python会调用__repr__方法来表示对象。反之亦然,如果只定义了__str__方法,而没有定义__repr__方法,那么当我们直接输入对象名称或使用repr()函数时,Python会调用__str__方法来表示对象。

总结一下:

  • print函数或str()函数调用对象的__str__方法,返回一个易于阅读的描述。
  • repr()函数或在交互式解释器中直接输入对象名称时,调用对象的__repr__方法,返回一个准确的表示形式。


希望这个解答能够帮助到您!如果您有任何进一步的问题,请随时向我提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-23 06:58:50 | 显示全部楼层
isdkz 发表于 2023-6-22 23:55
__str__和__repr__是Python中的特殊方法(也称为魔法方法),用于定义对象的字符串表示形式。
__str__方法 ...

非常感谢您的指点,很清晰,很准确。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 17:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表