#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.