来自for循环的Python类

时间:2009-01-13 20:31:45

标签: python class for-loop

我有一段代码,其中包含一个用于从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

如何创建此类的一系列实例,每个实例都是对函数的响应?或者什么是核心实用解决方案?这个人并不真正需要这个课程,但其中一个人确实需要这个课程。

2 个答案:

答案 0 :(得分: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')]

或者,您可以使用map:

evolutionList = map(Evolution, node.getElementsByTagName('evolution'))

答案 1 :(得分: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))

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

相关问题