首页 > 解决方案 > 如何让 .__repr__() 正常工作?

问题描述

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

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),它应该返回'Polynomial(1,2,3)',而不是像<__main__.Polynomial at 0x219eb9f52c8>。但它仍然返回那些没有信息的东西。我哪里做错了?

标签: pythonfor-looprepr

解决方案


您有多个问题:

  1. 您的缩进不正确,__repr__应该是您班级的方法。它目前是您方法的内部__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]))

推荐阅读