Ситуация: Я новичок в python и в настоящее время пытаюсь изучить веревки, я попытался создать класс связанных списков, чтобы помочь лучше понять язык и его структуры. Я знаю, что функция __repr__
в основном должна возвращать то же самое, что и __str__
, но я не уверен, какова фактическая разница.Написание метода репрезентации
Вот мой класс до сих пор:
class LinkedList:
class Node:
def __init__(self, val, prior=None, next=None):
self.val = val
self.prior = prior
self.next = next
def __init__(self):
self.head = LinkedList.Node(None)
self.head.prior = self.head.next = self.head
self.length = 0
def __str__(self):
"""Implements `str(self)`. Returns '[]' if the list is empty, else
returns `str(x)` for all values `x` in this list, separated by commas
and enclosed by square brackets. E.g., for a list containing values
1, 2 and 3, returns '[1, 2, 3]'."""
if len(self)==0:
return '[]'
else:
return '[' + ', '.join(str(x) for x in self) + ']'
def __repr__(self):
"""Supports REPL inspection. (Same behavior as `str`.)"""
return '[' + ', '.join(str(x) for x in self) + ']'
Когда я проверить этот код против кода ниже, я получаю сообщение об ошибке в основном говорят, пустую строку «[]» не на самом деле возвращаемой при использовании функция повторения. Как я могу отредактировать тело методов, чтобы исправить эту проблему? Я также пробовал return str(self)
, и я не уверен, почему это тоже не сработает.
from unittest import TestCase
tc = TestCase()
lst = LinkedList()
tc.assertEqual('[]', str(lst))
tc.assertEqual('[]', repr(lst))
lst.append(1)
tc.assertEqual('[1]', str(lst))
tc.assertEqual('[1]', repr(lst))
* «Я знаю, что функция' __repr__' в принципе должна возвращать то же самое, что и '__str__' * * - Я не знаю, как вы это знаете, но это неправильно, см. Документы в [' __str__ '] (https://docs.python.org/3/reference/datamodel.html#object.__str__) и [' __repr__'] (https://docs.python.org/3/reference/datamodel.html# объект .__ repr__). – jonrsharpe
Код, который вы показали, не может быть запущен как написанный (вы, по крайней мере, оставили методы '__len__' и' __iter__'), что затрудняет его устранение. Хотя мы ценим краткий вопрос, нам нужен [MCVE], который действительно работает! – Blckknght