Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将普通函数转换为类中的函数?_Python_Class_Oop - Fatal编程技术网

Python 如何将普通函数转换为类中的函数?

Python 如何将普通函数转换为类中的函数?,python,class,oop,Python,Class,Oop,我试图通过实现类和在类实例化上执行方法来组织我已经拥有的代码。我花了几个小时研究如何使用类,但仍然没有弄清楚。有人能帮我吗 这是原始代码: def readSignalAcquisitionData(fileName): f = open(fileName, 'r') # dummy read f.readline() timeStamps = [] dataInput = [] for ln in f: # parse i

我试图通过实现类和在类实例化上执行方法来组织我已经拥有的代码。我花了几个小时研究如何使用类,但仍然没有弄清楚。有人能帮我吗

这是原始代码:

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'
回溯(最近一次呼叫最后一次):
文件“SignalDataEvaluationUnit_OOP.py”,第26行,在
时间戳,dataInput=SignalDataIOUnit.readSignalAcquisitionData(文件名)
readSignalAcquisitionData中第7行的文件“SignalDataEvaluationUnit_OOP.py”
f=打开(self.fileName,“r”)
AttributeError:“str”对象没有属性“fileName”

是的,您应该这样使用

fileName="LabsWeek03_inputData.csv"

timeStamps, dataInput = SignalDataIOUnit(fileName).readSignalAcquisitionData()
print(timeStamps)

As@deceze♦ 在注释中说,您没有实例化类
SignalDataIOUnit
,这就是它不起作用的原因

要使其工作,您有两个选择:

  • 实例化
    SignalDataIOUnit
    对象并调用方法
    readSignalAcquisitionData
  • 使用Python的decorator
  • 那就照常说吧

    timeStamps, dataInput = SignalDataIOUnit.readSignalAcquisitionData(fileName)
    

    您没有实例化该类
    SignalDataIOUnit(文件名)。readSignalAcquisitionData()
    …非常感谢!那真是太好了stupid@deceze这看起来是对这个问题的一个非常好的回答,thijs可以将其掩盖为被接受。
    class SignalDataIOUnit:
        def __init__(self, fileName):
            self.fileName = fileName
    
        @staticmethod
        def readSignalAcquisitionData(fileName):
            ...
    
    timeStamps, dataInput = SignalDataIOUnit.readSignalAcquisitionData(fileName)