返回repr()

时间:2018-06-08 13:34:37

标签: python python-2.7

我有一个类'mn_board()',它创建一个m×n矩阵,如下所示:

class mn_board(object):
    cell_char = 'O'
    def __init__(self, r, c):
        self.r = r
        self.c = c
    def __repr__(self):
        columns = [[self.cell_char]*self.c]
        rows = [columns*self.r]
        return rows
my_board = mn_board(4,5)
print my_board

但是,它显示以下错误:

TypeError: __str__ returned non-string (type list)

我知道上面应该代码只显示列表形式而不是电路板形式,这不是我面临的问题,因为列表可以很容易地转换成矩阵格式。

列表不能在repr()函数中返回吗?有任何澄清吗?

2 个答案:

答案 0 :(得分:0)

Repr基本上是以可打印的表示形式返回string类型的值。从您的代码返回list类型,所以得到了错误。现在尝试使用str()

转换return str(rows)

您可以在** https://docs.python.org/3/library/functions.html#repr或** https://docs.python.org/3/reference/datamodel.html#object.repr

找到更多说明

将代码更改为:

class mn_board(object):
    cell_char = 'O'
    def __init__(self, r, c):
        self.r = r
        self.c = c
    def __repr__(self):
        columns = [[self.cell_char]*self.c]
        rows = [columns*self.r]
        return str(rows)
my_board = mn_board(4,5)
print my_board

答案 1 :(得分:0)

来自documentation(强调我的):

  

对象.__再版__(个体)

     

由repr()内置函数和by调用   用于计算“官方”字符串的字符串转换(反向引号)   对象的表示。如果可能的话,这应该是这样的   一个有效的Python表达式,可用于重新创建一个对象   具有相同的值(给定适当的环境)。如果不是这样的话   可能,<...some useful description...>形式的字符串应该   被退回返回值必须是字符串对象。如果是一个班级   定义__repr __()但不定义__str __(),然后使用__repr __()   当该类的实例的“非正式”字符串表示时   必需的。