__repr__返回非字符串类型错误

时间:2017-10-24 21:24:47

标签: python python-3.x

下面是我的类方法的虚拟示例:

class A:
  def __init__(self, name):
      self.name = name

  def __repr__(self):
      for i in range(0,5):
          if i == 0:
             print(self.name)
          else:
             print("-")
          i += 1


m1 = A("x")
m1

它为我打印出结果。但是,在此期间,它给出了一个错误,指出__repr__返回了非字符串。我知道我需要使用return而不是print __repr__,但是当满足第一个条件时,return将停止我的程序。我也尝试过收益但没有运气。

我知道这个虚拟程序看起来很荒谬,我可以使用其他一些方法而不是__repr__打印出结果。但这只是我实际程序的简化版本,出于某些原因我必须使用__repr____str__

2 个答案:

答案 0 :(得分:3)

你有两个基本问题。首先是你改变了循环中的循环索引 - 糟糕的形式,但根本不是致命的。第二个是你没有返回一个值。

立即修复

def __repr__(self):
  for i in range(0,5):
      if i == 0:
         val = self.name
      else:
         val += "-"

  return val

然而,即使这样也是无效的。

更好

您希望附加四个破折号的名称。为什么不这样做?

def __repr__(self):
    return self.name + "----"

答案 1 :(得分:2)

我假设您希望__repr__输出与打印时完全相同。为此,您只需稍微更改逻辑。这样的事情应该有效:

  def __repr__(self):
      string = ""
      for i in range(0,5):
          if i == 0:
             string += self.name
          else:
             string += "-"
          i += 1
      return string