Автоматизация переменной c присваивание и приращение - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю небольшую программу, которая получает 2 текстовых файла. Каждый файл содержит информацию об объекте или человеке. У каждого объекта всегда есть 8 предметов, и у каждого человека всегда есть 7 предметов. Мне удалось автоматически разместить эту информацию в списках независимо от количества объектов или людей, которые могут отображать текстовые файлы. Поэтому я получил два основных списка. Давайте назовем это «D» и «C». Каждый список имеет несколько списков с соответствующей информацией об объекте или человеке.

Пример:

D = [[att1, att2, att3, att4, att5, att6, att7, att8], [object 2], ..., [n-object]]

c = [[att1, att2, att3, att4, att5, att6, att7], [person 2], ..., [n-person]]

Поскольку я работаю с объектами, я создал два разных класса, один для обработки каждого списка , Метод конструктора получает атрибуты каждого человека или объекта.

Пример:

class DDD(object):
     def __init__(self, att1, att2, att3, att4, att5, att6, att7, att8):
          self._att1 = att1
          self._att2 = att2
          etc etc etc etc

То же самое относится и к другому классу.

Вот где я проблемы. Как автоматизировать создание экземпляров для каждого объекта? Сложность заключается в распределении переменных. Вы, конечно, можете создать 'для l oop', принимая во внимание 'len (D)' или 'len (C)' для создания экземпляров. Я мог бы вызвать аргументы метода конструктора по индексу.

, например:

for i in D:
     X1 = classD(i[0], i[1], i[2], etc etc)
     ......

Как автоматически сделать приращение переменной (X2, X3, X4, Xn), чтобы выполнить присваивание?

1 Ответ

0 голосов
/ 11 апреля 2020

Пожалуйста, форматируйте свой код, задавая вопросы.

Подходит ли вам создавать объекты и помещать их в список?

Попробуйте что-то вроде этого:

class DDD(object): 
    def init(self, att1, att2, att3, att4, att5, att6, att7, att8): 
        self._att1 = att1
        self._att2 = att2
        ...

people = []
for person in D:
    x = DDD(person[0], person[1], ...)
    people.append(x)

Таким образом, вы получите список DDD объектов на основе данных из D.

Если это то, что Вы хотите, чтобы вышеприведенный код был лучше написан как:

from dataclasses import dataclass

@dataclass
class Person:
    attr1: int
    attr2: str
    ...

people = [Person(*person) for person in D]

Я использую списки и классы данных, чтобы написать его лучше.

...