Python,类属性错误

问题描述 投票:1回答:2

我有一组看起来像这样的代码:

class DataFilter:

    def __init__(self, csvData):
        # converts csv string data to float lists, if possible
        data = []
        for line in csvData:
            try:
                line = line.split(',')
            except:
                print(line)
                return

            for i in range( len(line) ):
                try:
                    line[i] = float(line[i])
                except ValueError:
                    pass
            data.append(line)
        self.data = data

    def find_depth_index(self, depth):
        for index, line in enumerate( self.data ):
            if line[1] > depth:
                return index

    def remove_above_depth(self, depth):
        index = self.find_depth_index( depth )
        return self.data[ index: ]

    def remove_beyond_depth(self, depth):
        index = self.find_depth_index(depth)
        return self.data[ :index ]

data = DataFilter(data).remove_above_depth(SURF_CASING_DEPTH)
print('-----------------------')
data = DataFilter(data).remove_beyond_depth(VERTICAL_SEC_DEPTH)

然后它给我一个错误:

  File "C:/Users/Eric Soobin Kim/PycharmProjects/untitled/RAPID_use_filtered_data.py", line 35, in remove_beyond_depth
    def remove_beyond_depth(self, depth):
  File "C:/Users/Eric Soobin Kim/PycharmProjects/untitled/RAPID_use_filtered_data.py", line 26, in find_depth_index
    def find_depth_index(self, depth):
AttributeError: 'DataFilter' object has no attribute 'data'

我不明白的是,它在没有问题的情况下运行:

data = DataFilter(data).remove_above_depth(SURF_CASING_DEPTH)

但它不起作用,

data = DataFilter(data).remove_beyond_depth(VERTICAL_SEC_DEPTH)

我认为我的第一次过滤会以某种方式改变__ini__()中的元素,但我不知道发生了什么。为什么会发生这种情况,我该如何解决?

python class object attributes
2个回答
1
投票

您已将数据重新分配为等于您想要的其他内容。

data = DataFilter(data).remove_above_depth(SURF_CASING_DEPTH)

这意味着现在您已经丢失了指向曾经拥有的数据的指针。我可能会建议制作副本

new_data = DataFilter(data).remove_above_depth(SURF_CASING_DEPTH)
new_data2 = DataFilter(data).remove_beyond_depth(VERTICAL_SEC_DEPTH)

这样你仍然可以参考旧的data变量


0
投票

对象没有属性数据,因为您没有为其提供属性。属性是通过写作来定义的:self.object = []而不是:object = []

© www.soinside.com 2019 - 2024. All rights reserved.