我试图通过实现类并在类实例上执行方法来组织我已有的代码。我花了一些时间来弄清楚如何使用类,但仍然没有弄清楚。有人可以帮我吗?
这是原始代码:
def readSignalAcquisitionData(fileName):
f = open(fileName, 'r')
# dummy read
f.readline()
timeStamps = []
dataInput = []
for ln in f:
# parse info
timeStr, dataStr = ln.split(',')
timeStamps.append(float(timeStr))
dataInput.append(float(dataStr))
f.close()
return timeStamps, dataInput
这是我目前拥有的:
class SignalDataIOUnit:
def __init__(self, fileName):
self.fileName = fileName
def readSignalAcquisitionData(self):
f = open(self.fileName, 'r')
self.timeStamps = []
self.dataInput = []
for ln in f:
# parse info
self.timeStr, self.dataStr = ln.split(',')
self.timeStamps.append(float(self.timeStr))
self.dataInput.append(float(self.dataStr))
f.close()
return self.timeStamps, self.dataInput
def writeFilteredData(self, fileName, timeStamps, dataOut):
pass
fileName="LabsWeek03_inputData.csv"
timeStamps, dataInput = SignalDataIOUnit.readSignalAcquisitionData(fileName)
print(timeStamps)
当我尝试通过终端运行它时,出现以下错误消息:
Traceback (most recent call last):
File "SignalDataEvaluationUnit_OOP.py", line 26, in <module>
timeStamps, dataInput = SignalDataIOUnit.readSignalAcquisitionData(fileName)
File "SignalDataEvaluationUnit_OOP.py", line 7, in readSignalAcquisitionData
f = open(self.fileName, 'r')
AttributeError: 'str' object has no attribute 'fileName'
答案 0 :(得分:0)
是的,您应该这样使用
fileName="LabsWeek03_inputData.csv"
timeStamps, dataInput = SignalDataIOUnit(fileName).readSignalAcquisitionData()
print(timeStamps)
答案 1 :(得分:0)
正如@ deceze♦在评论中说的,您尚未实例化类SignalDataIOUnit
,这就是为什么它不起作用的原因。
要使其正常运行,您有2种选择:
SignalDataIOUnit
对象并调用方法readSignalAcquisitionData
:timeStamps, dataInput = SignalDataIOUnit(fileName).readSignalAcquisitionData()
@staticmethod
装饰器:class SignalDataIOUnit:
def __init__(self, fileName):
self.fileName = fileName
@staticmethod
def readSignalAcquisitionData(fileName):
...
然后照常叫它
timeStamps, dataInput = SignalDataIOUnit.readSignalAcquisitionData(fileName)