我已经阅读并理解了repr和str之间的区别并注意到了差异。
repr
- unambigous str
- 可读两者都使用了什么?我写了一个简单的类,发现在给出repr时会调用repr。
class test():
def __repr__(self):
return 'repr called'
def __str__(self):
return 'str called'
x = test()
print x
现在,当我检查Django ValidationError中两个类的实现时,我不确定何时会调用str,因为repr函数已经过载。
https://docs.djangoproject.com/en/2.0/_modules/django/core/exceptions/#ValidationError
def __str__(self):
# print 'validationerror str'
if hasattr(self, 'error_dict'):
return repr(dict(self))
return repr(list(self))
def __repr__(self):
# print 'validationerror repr'
return 'ValidationError(%s)' % self
如何以及何时调用__str__
函数?
答案 0 :(得分:1)
基本上,调用__str__()
进行显式字符串转换,即str(x)
将调用x.__str__()
。像print()
这样的函数也会对其参数执行字符串转换。
您的测试代码调用__repr__()
而不是__str__()
的原因是缩进已关闭 - __str__()
实际上并不是该类的一部分,因此它是不叫。否则print
会执行字符串转换,但如果str(x)
未定义,则x.__repr__()
会回退到__str__()
。