来自for循环的Python类

来自for循环的Python类,python,class,for-loop,Python,Class,For Loop,我有一段代码,其中包含一个for循环,用于从XML文件中绘制内容 for evoNode in node.getElementsByTagName('evolution'): evoName = getText(evoNode.getElementsByTagName( "type")[0].childNodes) evoId = getText(evoNode.getElementsByTagName( "typeid")[

我有一段代码,其中包含一个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
如何创建该类的一系列实例,每个实例都是函数的响应?或者什么是核心的实际解决方案?这个不需要上课,但其他的一个确实需要

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))

我重新命名了你的列表,因为它与你的类同名,令人困惑。

列表理解可能更清晰一些。我还将解析逻辑移动到构造函数以清理实现:

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'))

你能不能把他们的类改名为大写,就像正确的类名应该是大写的一样?我想正是我把类作为第一个字母的大写字母。或者你指的是所有的字母?关于风格,你应该总是以大写字母开头的驼峰大小写命名类,它们不应该是复数。它应该是:class evolution您还可以从class字段中删除'evo'前缀,它们可以从类的上下文中推断出来。保存键入内容。:)不要重复你自己(DRY):
get=lambda name:getText(evoNode.getElementsByTagName(name)[0].childNodes)
property
是Python中的内置函数。像你那样使用它是一种糟糕的风格。