2

我有一段代码,其中包含一个用于从 XML 文件中绘制内容的 for 循环;

   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函数的响应?或者什么是核心实用解决方案?这个并不真正需要课程,但其他一个确实需要。

4

2 回答 2

4

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

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'))
于 2009-01-13T20:51:11.073 回答
3
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))

我重命名了您的列表,因为它与您的班级同名并且令人困惑。

于 2009-01-13T20:35:25.723 回答