Классы Python из цикла for

У меня есть фрагмент кода, содержащий цикл for для извлечения информации из файла XML;

   for evoNode in node.getElementsByTagName('evolution'):
      evoName    = getText(evoNode.getElementsByTagName(        "type")[0].childNodes)
      evoId      = getText(evoNode.getElementsByTagName(      "typeid")[0].childNodes)
      evoLevel   = getText(evoNode.getElementsByTagName(       "level")[0].childNodes)
      evoCost    = getText(evoNode.getElementsByTagName("costperlevel")[0].childNodes)

      evolutions.append("%s x %s" % (evoLevel, evoName))

В настоящее время он выводит в список под названием evolutions, как сказано в последней строке этого кода, для этой и нескольких других функций с очень похожей функциональностью мне нужно вместо этого вывести в класс.

class evolutions:
    def __init__(self, evoName, evoId, evoLevel, evoCost)
        self.evoName = evoName
        self.evoId = evoId
        self.evoLevel = evoLevel
        self.evoCost = evoCost

Как создать серию экземпляров этого класса, каждый из которых является ответом на функцию? Или каково основное практическое решение? Этому класс действительно не нужен, а вот другому действительно нужен.

Примечание о стиле, вы всегда должны называть классы верблюжьим регистром, начиная с заглавной буквы, и они не должны быть множественными. Должно быть: class Evolution

Soviut 13.01.2009 23:39

Вы также можете удалить префикс «evo» из полей класса, они могут быть выведены из контекста класса. Сохраняет набор текста. :)

Craz 13.01.2009 23:50

Не повторяйся (СУХОЙ): get = lambda name: getText(evoNode.getElementsByTagName(name)[0].childNodes)

jfs 30.08.2009 16:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
3 413
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
for evoNode in node.getElementsByTagName('evolution'):
  evoName      = getText(evoNode.getElementsByTagName("type")[0].childNodes)
  evoId      = getText(evoNode.getElementsByTagName("typeid")[0].childNodes)
  evoLevel   = getText(evoNode.getElementsByTagName("level")[0].childNodes)
  evoCost      = getText(evoNode.getElementsByTagName("costperlevel")[0].childNodes)

  temporaryEvo = Evolutions(evoName, evoId, evoLevel, evoCost)
  evolutionList.append(temporaryEvo)

  # Or you can go with the 1 liner
  evolutionList.append(Evolutions(evoName, evoId, evoLevel, evoCost))

Я переименовал ваш список, потому что он имеет то же имя, что и ваш класс, и сбивает с толку.

Не могли бы вы также переименовать их класс в верхний регистр, например, правильные имена классов должны быть?

S.Lott 13.01.2009 23:38

Я думал, что это только я поместил классы в верхний регистр для первой буквы. Или ты про все буквы?

Teifion 13.01.2009 23:41

Понимание списка могло бы быть немного чище. Я бы также переместил логику синтаксического анализа в конструктор, чтобы очистить реализацию:

class Evolution:
    def __init__(self, node):
        self.node = node
        self.type = property("type")
        self.typeid = property("typeid")
        self.level = property("level")
        self.costperlevel = property("costperlevel")
    def property(self, prop):
        return getText(self.node.getElementsByTagName(prop)[0].childNodes)

evolutionList = [Evolution(evoNode) for evoNode in node.getElementsByTagName('evolution')]

В качестве альтернативы вы можете использовать карту:

evolutionList = map(Evolution, node.getElementsByTagName('evolution'))
property - это встроенная функция Python. Плохой стиль - использовать его так, как ты. docs.python.org/library/functions.html#property
jfs 30.08.2009 16:02

Другие вопросы по теме