在 python 解释器中执行单个变量时,什么决定了输出?

What determines output when executing single variable in python interpreter?

所以以复杂的内置类型为例。我正在制作我自己的 Complex 版本用于教育目的,但是截至目前,它们的行为方式不同。 当我运行

>>> a = (2+3j)
>>> a
(2+3j)
>>> from complex import Complex # My version of the type
>>> b = Complex(2, 3)
>>> b
<complex.Complex object at 0x10caeb0f0>

我希望我的 class 输出同样的东西。我一直认为这是 str 魔法方法的目的,但只有当某些东西试图将实例转换为字符串时才会调用它,而这在上面的示例中并没有发生。如何做到这一点?

使用__repr__:

class Complex:
  def __init__(self, i, j):
    self.i = i
    self.j = j

  def __repr__(self):
    return f'({self.i}, {self.j}j)'

b = Complex(2, 3)
print(b)

输出:

(2, 3j)