2015-08-30 44 views
0

我试图创建一个类的实例来测试我创建的模块是否正常工作。无法在Python中的类实例中设置属性

这里是模块(fileWriter.py),误差似乎是在INIT方法:

class File(object): 
'''process the data from a file''' 

#fields 
#fileName = name of file 
#textData = data read from/written to file 

#Constructor 
def __init__(self, fileName = 'saved_data.txt', textData = ''): 
    #Attributes 
    self.fileName = fileName 
    self.textData = textData 

#Properties 
@property #getter 
def fileName(self): 
    return self.__fileName 

@fileName.setter #setter 
def fileName(self, value): 
    self.__fileName = value 

@property #getter 
def textData(self, value): 
    self.__textData = value 

#Methods 
def saveData(self): 
    '''appends data to file''' 
    try: 
     fileObj = open(self.fileName, 'a') 
     fileObj.write(self.textData) 
     fileObj.close() 
    except Exception as e: 
     print('You have the following error: ' + str(e)) 
    return('Data successfully saved to file.') 

def toString(self): 
    '''returns text data explicitly''' 
    return self.fileName + ':' + self.textData 

def __str__(self): 
    '''returns text data implicitly''' 
    return self.toString() 

要测试类,我写了下面的测试工具:

import fileWriter 

    import fileWriter 

#test harness 
processorObj = fileWriter.File() 
processorObj.fileName = 'test.txt' 
processorObj.textData = 'testing, 1, 2, 3...' 
strMessage = processorObj.saveData() 
print(strMessage) 

if __name__ == '__main__': 
    raise Exception('Don\'t run a module by itself!') 

当我运行测试文件时,出现错误:

文件“testFileWriter.py”,第4行,在 processorObj = file Writer.File() 文件 “/Users/Haruka/Documents/python_class/Employees/fileWriter.py”,第19行,在初始化 self.textData =的TextData AttributeError的:不能设置属性

我无法弄清楚self.textData = textData有什么问题。任何人都可以帮忙吗?

回答

2

我不知道,如果你在粘贴后格式化你的代码,但是有几个错别字:

def __init__(self, fileName = 'saved_data.txt', textData = ''): 
    #Attributes 
    self.__fileName = fileName 
    self.__textData = textData 

@property #getter 
def textData(self): 
    return self.__textData 

在测试之后,你也尝试设置在你的例子中没有setter的textData属性。你可以添加到你的班级:

@textData.setter 
def textData(self, value): 
    self.__textData = value 

更pythonic的方式来做一些文件io的东西是与上下文。

def saveData(self): 
    '''appends data to file''' 

    with open(self.fileName, 'a') as f: 
     f.write(self.textData) 
    return('Data successfully saved to file.')