如何让 .__repr__() 正常工作?

How do I get .__repr__() to work correctly?

我想在 Python 中使用 __repr__,因此我可以按照我希望的方式查看表示,如下所示。

class Polynomial:
    def __init__(self, *args):
        self.args = args
        def __repr__(self):
            Repr = "Polynomial("
            for i in args:
                if i == 0:
                    Repr = Repr + str(self.args[i])
                else:
                    Repr = Repr + ", "+ str(self.args[i])
            return Repr

所以如果我输入 Polynomial(1,2,3),它应该 return 'Polynomial(1,2,3)',而不是 <__main__.Polynomial at 0x219eb9f52c8>。但它仍然是 return 那些无意义的东西。我哪里做错了?

您有多个问题:

  1. 你的缩进不正确,__repr__应该是你的class的一个方法。它目前是您的 __init__ 方法的内部方法。
  2. 您正在迭代 args 但您正在尝试使用 i 就好像它是索引(它是实际的 arg)
  3. 您可以使用 .join() 轻松地将列表转换为逗号分隔的字符串。

这是您的方法的有效实现:

class Polynomial:
    def __init__(self, *args):
        self.args = args
    def __repr__(self):
        Repr = "Polynomial("
        for i in range(len(self.args)):
            if i == 0:
                Repr = Repr + str(self.args[i])
            else:
                Repr = Repr + ", "+ str(self.args[i])
        Repr += ")"
        return Repr

这是一种更精简的方法,它使用字符串格式和 .join()::

class Polynomial:
    def __init__(self, *args):
        self.args = args
    def __repr__(self):
        return "Polynomial({})".format(", ".join([str(arg) for arg in self.args]))

这是修复您的一些拼写错误后的解决方案 code.But 我建议您对字符串使用 f-strings 和一个 liner expression representation.The 使用一个 liner 和 f-strings 更好在@Selcuk 回答中解释

class Polynomial:
    def __init__(self, *args):
        self.args = list(args)
    def __repr__(self):
        Repr = "Polynomial("
        for i,j in enumerate(self.args):
            if i == 0:
                Repr = Repr + str(j)
            else:
                Repr = Repr + ", "+ str(j)

        return Repr + ")"