2010-12-20 190 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