You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解释器单变量执行输出规则及自定义Complex类输出匹配问题

问题1:Python解释器中执行单个变量时,输出由什么决定?

当你在Python交互式解释器里直接输入变量名并回车时,输出是由该对象的__repr__()魔法方法决定的。这个方法的设计目标是生成供开发者阅读的、尽可能准确且可还原对象的字符串表示——简单说就是,理想情况下,你把__repr__返回的字符串复制到解释器里,应该能重建出同一个对象。

对比之下,__str__()方法是当你用print()函数输出对象,或者把对象转换成字符串(比如str(obj))时才会触发,它的目标是生成更友好、面向普通用户的可读性字符串。


问题2:自定义Complex类如何实现和内置类型一致的交互式输出?

你说得没错,__str__确实只在转字符串或print时生效,而交互式环境直接调用变量触发的是__repr__方法——这就是为什么你的自定义Complex实例显示的是默认的<complex.Complex object at 0x10caeb0f0>(这是Python为所有没自定义__repr__的类提供的默认实现)。

要让你的自定义类和内置complex表现一致,只需要在Complex类里实现__repr__方法即可。比如:

class Complex:
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag
    
    def __repr__(self):
        # 模仿内置complex的格式输出,同时处理虚部正负的情况
        if self.imag >= 0:
            return f"({self.real}+{self.imag}j)"
        else:
            return f"({self.real}{self.imag}j)"
    
    # 如果需要让print()也输出同样格式,可以直接让__str__复用__repr__
    def __str__(self):
        return self.__repr__()

这样再测试的话:

>>> b = Complex(2, 3)
>>> b
(2+3j)
>>> print(b)
(2+3j)

简单总结一下两个魔法方法的核心区别:

  • __repr__:给开发者看的,强调准确性和可还原性,交互式环境、调试器里默认调用
  • __str__:给用户看的,强调可读性,print/str()时调用

内容的提问来源于stack exchange,提问作者Snusifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:34:37