2010-12-20 192 views
0

我想通过这段代码问题与蟒蛇

docs = XmlReportGenerator() 
docs.AddMatchRow('FC Barcelona','Madryt','5:0') 
docs.Save() 

写一些XML和我写我自己的方法定义变量:

from lxml import etree 

class XmlReportGenerator: 
    """""" 
    root = etree.Element('results') 
    doc = etree.ElementTree(root) 

    #---------------------------------------------------------------------- 
    def __init__(self): 

     """""" 

    def AddMatchRow(self,teamA,teamB, score): 
     pageElement = etree.SubElement(root,'Flight',teamA, teamB, score) 

     """""" 

    def Save(self,path = None): 
     outFile = open('Matches.xml', 'w') 
     doc.write(outFile) 

NameError:全局名称“根”没有定义 过程与完成

NameError 1 的退出代码终止:全球名“doc的”没有定义 过程TERMI用退出码1 完成

我错过了什么吗?我是python的新手(我在c​​#中有更多的经验)。

+0

如果你没有意见,反正写代码,没有一点用'“”“”“”'滥发它。在AddMatchRow的情况下,它不会添加任何内容,甚至不会算作pydoc(它是在一些语句之后)。使用'#comment'是你想要一些视觉分离。 – viraptor 2011-05-19 14:56:04

回答

3

Python是显式的。实例变量必须以self.作为前缀。类变量必须与该类的名称相加。

这里是一个固定版本。原来SubElement通话是不正确的,以及:

from lxml import etree 

# derive from 'object' if Python 2.X (it is default in Python 3.X) 
class XmlReportGenerator(object): 

    def __init__(self): 
     # clearer to init instance variables here. 
     self.root = etree.Element('results') 
     self.doc = etree.ElementTree(self.root) 

    def AddMatchRow(self,teamA,teamB, score): 
     # Need self.root here 
     pageElement = etree.SubElement(self.root,'Flight') 
     # Added data elements (or did you want attributes?) 
     etree.SubElement(pageElement,'teamA').text = teamA 
     etree.SubElement(pageElement,'teamB').text = teamB 
     etree.SubElement(pageElement,'score').text = score 

    def Save(self,path = None): 
     outFile = open('Matches.xml', 'w') 
     # Need self.doc here 
     self.doc.write(outFile) 

# This code will run if the script is executed directly, 
# but will be skipped if the script is imported by another script. 
if __name__ == '__main__': 
    docs = XmlReportGenerator() 
    docs.AddMatchRow('FC Barcelona','Madryt','5:0') 
    docs.Save() 
2

self是有原因的。使用self.root而不是root

+1

'XmlReportGenerator.root' – khachik 2010-12-20 09:18:51

+1

@khachik或那,取决于上下文。一般来说,'self.root' – 2010-12-20 09:22:18