Ошибка в возврате списка для repr () - PullRequest
0 голосов
/ 08 июня 2018

У меня есть класс 'mn_board ()', который создает матрицу amxn следующим образом:

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 голосов
/ 08 июня 2018

Из документации (выделено мной):

object .__ repr __ (self)

Вызывается встроенной функцией repr () истроковые преобразования (обратные кавычки) для вычисления «официального» строкового представления объекта.Если это вообще возможно, это должно выглядеть как допустимое выражение Python, которое можно использовать для воссоздания объекта с тем же значением (при условии соответствующей среды).Если это невозможно, должна быть возвращена строка вида <...some useful description...>. Возвращаемое значение должно быть строковым объектом .Если класс определяет __repr __ (), но не __str __ (), тогда __repr __ () также используется, когда требуется «неформальное» строковое представление экземпляров этого класса.

0 голосов
/ 08 июня 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...