回答

收藏

__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__!
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则