Является ли использование цикла for в python правильной техникой программирования для создания объектов?

#python #class #list #object

#python #класс #Список #объект

Вопрос:

Хорошо, итак, в основном то, что я считываю данные из файла, и с этими данными я хочу создать объект для каждой строки.

Итак, что-то вроде:

 bar = [['a','b'],['c','d']]

for foo in bar:
    foo = Class_name(list_of_arguments)
  

Какой метод был бы лучшим для «распаковки» списка? Лучше всего ли это сделать в методе инициализатора класса или было бы лучше сделать это перед созданием объекта и передать аргументы в формате, отличном от списка? Я спрашиваю, потому что списки содержат информацию, относящуюся к объекту, который будет использоваться классом.

Также я хотел бы, чтобы у каждого объекта было уникальное имя, что я должен для этого сделать? Было бы лучше использовать одно из значений в списке?

Комментарии:

1. Что foo находится в цикле for? Что list_of_arguments это должно означать?

2. что list_of_arguments в вашем коде? Кроме того, вы действительно пытаетесь присвоить foo , который является переменной итерации?

3. @S.Лотт — ты опередил меня менее чем на 1 секунду!

Ответ №1:

Я… думаю, я понял ваш вопрос. Я бы, вероятно, подошел к этому так:

 class myClass():
  def __init__(self, *args):
    # something here that actually uses the arguments.

data = [['a', 'b'], ['c', 'd']]

objects = [myClass(*vals) for vals in data]
  

Это должно создавать экземпляр MyClass для каждого набора значений и возвращать список новых объектов, доступных по индексу.

Комментарии:

1. Спасибо, это именно то, что я искал! Хотя я все еще не уверен на 100%, как это работает.

2. @Sheldon — Какие части? Описание списков стоит прочитать, если [x for x in y] синтаксис сбивает вас с толку. Как только вы обдумаете это, следующая идея, используемая здесь, заключается в том, что я распаковываю внутренние списки, чтобы передать их конструктору для MyClass . Вот где myClass(*vals) появляется. HTH.