Вы не вызываете ваши методы.Вам показано представление самих объектов метода, а не их результаты.
Добавление ()
вызовов:
def __str__(self):
return (
'<' + self.get_recipient() + ', ' +
self.get_priority_category() + ', ' +
str(self.get_cost()) + ', ' +
str(self.get_weight()) +
'>')
Я отбросил избыточные str()
вызовы (get_recipient()
и get_priority_category()
уже генерируют строки) и добавили (...)
вокруг выражения, чтобы его можно было разбить на несколько строк для удобства чтения.
Не то, что вам нужно для большинства этих методов, потому что выможет просто получить доступ к базовым атрибутам напрямую:
def __str__(self):
return (
'<' + self.name + ', ' +
self.get_priority_category() + ', ' +
str(self.cost) + ', ' +
str(self.weight) +
'>')
В Python вы, как правило, не используете функции доступа, не тогда, когда прямой доступ к атрибуту будет достаточным.Это отличается от языков, таких как Java, где сложно заменить доступ к атрибутам функцией доступа после факта.В Python тривиально перейти на использование property
позже, поэтому бесплатное использование атрибутов обходится бесплатно.
Вышесказанное можно упростить, используя форматирование строк;для Python 3.6 и выше используйте f-строку:
def __str__(self):
return f'<{self.name}, {self.get_priority_category()}, {self.cost}, {self.weight}>'
, в противном случае используйте str.format()
, чтобы сделать то же самое:
def __str__(self):
return '<{}, {}, {}, {}>'.format(
self.name, self.get_priority_category(), self.cost, self.weight)
При использовании строкового форматирования никаких вызовов str()
необходимы, и вы экономите много набрав '
и +
символов.