我有一段代码,其中包含一个用于从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
如何创建此类的一系列实例,每个实例都是对函数的响应?或者什么是核心实用解决方案?这个人并不真正需要这个课程,但其中一个人确实需要这个课程。
答案 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))
我重命名了您的列表,因为它与您的班级名称相同并且令人困惑。