#python #list #class
#python #Список #класс
Вопрос:
Я хочу написать класс для векторов, и мне нужно иметь возможность преобразовывать целые числа в списке в строку и печатать их.
Пример: [1,2.5] —> «<1,2.5>»
Это то, что я придумал, но оно не работает, любая помощь будет оценена.
class Vector(list):
def __init__(self,other):
assert len(other)!=0, "Invalid Input!"
for e in other:
assert type(e)==int or type(e)==float, "Invalid Input!"
list.__init__(self,other)
def __str__(self):
s = ''
for x in range (len(self)):
s = str(self.x)
return s
Комментарии:
1.
s = str(self.x)
может быть, должно бытьs = str(self.x)
? (нет пробела между и =)2. Какую ошибку вы получаете?
3. Пожалуйста, исправьте отступ. Пробелы очень важны в Python.
4. @MadPhysicist Извините, в python это правильно, когда я копирую вставку сюда, это выглядит так.
5. Пожалуйста, исправьте это здесь. И опубликуйте свою ошибку. У вашего класса нет атрибута
x
Ответ №1:
Используйте функцию объединения, чтобы объединить себя.
def __str__(self):
return "<%s>" % ", ".join(self)
Join в основном возвращает строку содержимого списка, разделенную запятой и пробелом. Затем мы помещаем угловые скобки в строку, с которой мы ее объединяем.
Комментарии:
1. Привет! Спасибо за ответ. Я получаю эту ошибку при реализации вашего кода: элемент последовательности 0: ожидаемый экземпляр str, найден int
2. Использование
return f"<%s>" % ", ".join(map(str, self))
3. Вы потрясающие: 3 Спасибо!
4. В наши дни обычно предпочтительнее использовать оператор %.string.format() .
Ответ №2:
Другой вариант с использованием f
-strings
def __str__(self):
return(f'<{super().__str__()[1:-1]}>')