我有一个类'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()函数中返回吗?有任何澄清吗?
答案 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 __() 当该类的实例的“非正式”字符串表示时 必需的。