__str__ 和 __repr__ 有什么区别?
技术问答
392 人阅读
|
0 人回复
|
2023-09-11
|
__str__Python和Python有什么区别__repr__?
" Q" F) r8 W* h8 b
; W- Y" A$ x/ V! N m 解决方案: ; E& y8 S, ^/ d: z* s3 r/ [1 V
除非你采取特殊行动来确保其他情况,否则大多数课程对以下任何项目都没有用:, s2 L6 j7 s' ~5 k0 C1 T
>>> class Sic(object): pass... >>> print(str(Sic()))>>> print(repr(Sic()))>>>
* y) d2 b: v: F, w; k" p* m 如您所见 - 没有区别,除了类别和对象。id.如果你只覆盖两者之一......:
1 N, y# S3 _* F2 h>>> class Sic(object): ... def __repr__(object): return 'foo'... >>> print(str(Sic()))foo>>> print(repr(Sic()))foo>>> class Sic(object):... def __str__(object): return 'foo'... >>> print(str(Sic()))foo>>> print(repr(Sic()))>>>
" S |) i( P% X! v 如你所见,如果你覆盖__repr__,那也用于__str__,但反之亦然。0 @' d9 I; q2 L/ z
其他要知道的重要花絮:__str__在内置容器上,它包含的项目使用__repr__,而不是。__str__而且,虽然在典型文档中找到了关于主题的文本,但很少有人会担心__repr__对象设为eval可用于构建相等对象的字符串(太难了,不可能导入相关模块)。
. c. P% g- j3 k0 `( v因此,我的建议是:专注于使用__str__人类可读性合理,__repr__尽可能清楚,即使会干扰__repr__‘ 的返回值可以接受模糊的目标目标__eval__! |
|
|
|
|
|