首页 新闻 会员 周边 捐助

__str__和str() __repr__和repr()区别

0
[已关闭问题] 关闭于 2025-08-29 07:53

str(x) / repr(x)Python 解释器提供的内置函数,永远可用,它们内部会去调用对象的方法

__str__ / __repr__ 是你 在类里定义的特殊方法,决定当对象被 str() / repr()print()到底输出什么

_java_python的主页 _java_python | 小虾三级 | 园豆:992
提问于:2025-08-29 07:47
< >
分享
所有回答(1)
0
  • str() → 给人看(漂亮、简洁)。
  • repr() → 给机器/调试看(尽量能 eval 回来)。
      • 你的类 没有写 __repr____str__ → 继承自 object 的这两个方法。
      • “最顶层的默认实现”就是 Python 内置的 object 类里自带的:
        Python
        复制
        def __repr__(self):
            return f'<{self.__class__.__module__}.{self.__class__.__qualname__} object at {hex(id(self))}>'
        
        def __str__(self):
            return self.__repr__()   # 如果没有重写 __str__,就直接用 __repr__

         

      • print(obj) → 触发 __str__ → 发现没重写 → 退回到 __repr__ → 最终输出
        <__main__.类名 object at 0x内存地址>
    print(m1),m1是某个类对象
     
    Python 在底层会按下面的顺序找方法:
        1. 先找 __str__ 有没有被定义 → 如果有,就调用 str(m1),结果给 print
        2. 如果 没有 __str__,就会退而求其次调用 repr(m1),也就是 __repr__
        f是对象:print(f) ,print(str(f)),print(repl(f))都遵循上面规则,只不过直接print(f)要自己找__str__,内置函数str(),repl()本身就用到了__str__,__repl__效果,不需要寻找
_java_python | 园豆:992 (小虾三级) | 2025-08-29 07:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册