马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)? 谢谢老师们的指点。
本帖最后由 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__方法,返回一个准确的表示形式。
希望这个解答能够帮助到您!如果您有任何进一步的问题,请随时向我提问。
|