@MAGistr_MTM
Учусь программировать

Как создать клас с неопределенным количеством переменных?

Доброе время суток.

У меня вот такая пробема: нужно создать клас - Вектор, который может быть любой размерности. И для него пару методов. У меня загвоздка из инициацией, и представлением в текстовом варианте.
a = Vector(1,2,3)
str(a) == '(1,2,3)' #так должень быть представлен

Вот что я сам пробовал, но увы(
class Vector:
  def __init__(self, *args):
    for arg in args:
      setattr(self, str(arg), arg)
      
  def __str__(self):
      return "({})".format(",".join(args))

П.С. Извините за мой плохой русский.
  • Вопрос задан
  • 534 просмотра
Решения вопроса 3
@idap
интересуюсь python, latex, linux, ML, AI
Возможно, как-то так
class Vector:
  def __init__(self, *args):
    self.data = args
      
  def __str__(self):
      return "({})".format(",".join(str(e) for e in self.data))
Ответ написан
Комментировать
@tplus
def __str__(self):
      return "({})".format(",".join(args))


В этом месте у вас уже нету args. Зато вы можете уже обращаться к полям объекта. Но нужно ли делать много полей? Может использовать одно поле, которое бы хранило входные аргументы?

class Vector:
  def __init__(self, *args):
    self.point = []
    for arg in args:
      self.point.append(arg)
      
  def __str__(self):
      return "({})".format(",".join(map(str, self.point)))
     
a = Vector(1, 2, 3, 4)
print a
b = Vector(10, 20, 30, 40)
print b


В данном примере входные аргументы сохраняются в списке self.point, откуда их легко извлечь.
Также в ",".join добавлено приведение всех объектов self.point к строке, чтобы можно было их объединять.
Ответ написан
Комментировать
@deliro
Агрессивное программирование
class Vector(object):
    def __init__(self, *args):
        self._data = args

    def __str__(self):
        return '({})'.format(','.join(map(str, self._data)))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы