проблема с выводом результата метода
мне надо написать класс Armor() и его наследник GostInArmor().если что, в задании было сказано, что будет передаваться произвольное кол-во кортежей(в том числе ни одного)-это имя лат и их кол-во, а также передают имя рыцаря(имя по умолчанию(если не укажут)-Canterville).выводить нужно отсортированные картежи по алфавиту имён лат(с этим я справился).короче, нужно чтобы мне выводил правильно, а как это сделать-я не знаю((((
class Armor():
def __init__(self, *kortez, name = "Canterville"):
self.name = name
self.ll = list(kortez)
class GhostInArmor(Armor):
def __repr__(self):
self.ll.sort(key=lambda x: (x[0]))
return f'GhostInArmor{tuple(self.ll), self.name}'
gia = GhostInArmor(("knee pad", 2), ("handlebar", 1), ("shoe", 1), name="Ghost")
print(gia)
Должен выводить
GhostInArmor(('handlebar', 1), ('knee pad', 2), ('shoe', 1), name='Ghost')
а выводит
GhostInArmor((('handlebar', 1), ('knee pad', 2), ('shoe', 1)), 'Ghost')
как это можно исправить? не знаю даже как задать этот вопрос в интернете, поэтому, после долгих попыток найти что-то в интернете, решил задать вопрос сюда. помогите, пожалуйста, буду очень благодарен))
Ответы (1 шт):
class Armor():
def __init__(self, *kortez, name = "Canterville"):
self.name = name
self.ll = list(kortez)
class GhostInArmor(Armor):
def __repr__(self):
self.ll.sort(key=lambda x: (x[0]))
return f'GhostInArmor({tuple(self.ll)}, name={self.name!r})'
gia = GhostInArmor((("knee pad", 2), ("handlebar", 1), ("shoe", 1), name="Ghost")
print(gia)
Результат:
GhostInArmor((('handlebar', 1), ('knee pad', 2), ('shoe', 1)), name='Ghost')
Смысл в том, что не все вставляем в одни фигурные скобки внутри f-строки, а отдельные фигурные скобки добавить для name. Для name нужно добавить !r, чтобы выводилось repr-представление строки (в кавычках). Ну и общие скобки в строке добавить.
Для примера, разница str-представления и repr-представления:
name = "Ghost"
print(str(name)) # Выведет Ghost
print(repr(name)) # Выведет 'Ghost'
То же самое на f-строках, обычные фигурные скобки "без параметров" вызывают str для преобразования объекта в строку, фигурные скобки с !r - repr:
name = "Ghost"
print(f"{name}") # Выведет Ghost
print(f"{name!r}") # Выведет 'Ghost'
Для tuple это не обязательно делать, т.к. у tuple str и repr представления совпадают.
В целом repr используется для отображения объекта в виде "для программиста" - в идеале текст такого представления должен быть корректным кодом на Python. Обычное строковое представление - для пользователя.