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

このクラスの一連のインスタンスを作成するにはどうすればよいですか。各インスタンスは、関数に対する応答です。または、コアとなる実用的なソリューションは何ですか?これは実際にはクラスを必要としませんが、他の1つは実際に必要です。

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 に答える