在迭代器创建时保存实例 - Python

Saving instances when created by an iterator - Python

我想使用迭代器生成 class 的多个实例,但我也希望能够为在此过程中创建的每个单独实例分配一个变量。有没有办法做到这一点?下面是我当前的代码,结果是我能够打印我希望访问的数据,但是每次迭代时创建的对象都会被覆盖。理想情况下,我想为从迭代器生成的每个字典分配单独的变量,以便我可以对它们应用其他函数。因此,如果电子表格包含 3 行中的数据,那么我将有 3 个不同的 layerObject,而不是最后只有一个 layerObject。如果不预先定义将要创建的对象的数量,我似乎无法弄清楚如何做到这一点,但是我希望它保持足够的灵活性,以便它可以生成(并保存)与行数一样多的对象数据。有办法吗?

import openpyxl

layerFile = openpyxl.load_workbook('\xxx/xxx/xxx.xlsx')
layerSheet = layerFile.get_sheet_by_name('Sheet1')

class Layer:

    def __init__(self, layerNumber):
        #initialize list to hold layer data
        self.layerData = []
        self.keyFields = []

        #read layer attribute data from excel file
        for columns in range(1, layerSheet.get_highest_column()+1):
            cellData = layerSheet.cell(row = layerNumber + 1, column = columns).value
            cellFields = layerSheet.cell(row = 1, column = columns).value
            self.layerData.extend([cellData])
            self.keyFields.extend([cellFields])

    #creates dictionary that contains layer information
    def layerContainer(self):
        self.layerContainer = dict(zip(self.keyFields, self.layerData))
        return self.layerContainer

#reads the file for all layers in the excel file and creates 
for rows in range(1, layerSheet.get_highest_row()+1):
    layerObject = Layer(rows)
    print(layerObject.layerContainer())

我想你想要的是使用某种数据结构来存储创建的 Layer 对象,比如 listdictionary.

然后您可以稍后访问列表或字典(遍历它们)以获取图层对象。示例 -

layer_list = []
for rows in range(1, layerSheet.get_highest_row()+1):
    layerObject = Layer(rows)
    print(layerObject.layerContainer())
    layer_list.append(layerObject)

然后访问你的图层对象-

for layerObject in layer_list:
    print(layerObject)
    #Do whatever you want with it.

此外,理想情况下,您不应使用与函数名称相同的变量名称,尤其是在 class 中,因为当您这样做时 -

def layerContainer(self):
    self.layerContainer = dict(zip(self.keyFields, self.layerData))
    return self.layerContainer

您正在使用字典覆盖 layerContainer 函数,因此在调用此函数后,您无法再将 layerContainer 作为函数访问。