回答

收藏

__str__ 和 __repr__ 有什么区别?

技术问答 技术问答 393 人阅读 | 0 人回复 | 2023-09-11

__str__Python和Python有什么区别__repr__?
1 Y$ |: b# h+ J4 j                                                               
" @% e  ~+ F% D1 ]! |! |" i    解决方案:                                                                9 Z  O5 M: {  m1 ^+ y& W# f
                                                                除非你采取特殊行动来确保其他情况,否则大多数课程对以下任何项目都没有用:
8 G. V5 W: }' \  Q" |% q
    >>> class Sic(object): pass... >>> print(str(Sic()))>>> print(repr(Sic()))>>> , B! |3 t0 i( S
如您所见 - 没有区别,除了类别和对象。id.如果你只覆盖两者之一......:8 D9 |# o) O2 @+ _) u1 U3 m
    >>> 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()))>>>
    3 S, r, P' n7 G' ^* w/ N; G$ p- F
如你所见,如果你覆盖__repr__,那也用于__str__,但反之亦然。
# L+ f1 ]" W! {5 A( r$ ?0 i其他要知道的重要花絮:__str__在内置容器上,它包含的项目使用__repr__,而不是。__str__而且,虽然在典型文档中找到了关于主题的文本,但很少有人会担心__repr__对象设为eval可用于构建相等对象的字符串(太难了,不可能导入相关模块)。$ F! S5 d4 |, w* E' m4 ?6 w
因此,我的建议是:专注于使用__str__人类可读性合理,__repr__尽可能清楚,即使会干扰__repr__‘ 的返回值可以接受模糊的目标目标__eval__!
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则