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

2024-09-29 21:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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())

Tags: columns数据对象inselflayerforget
1条回答
网友
1楼 · 发布于 2024-09-29 21:33:48

我认为您想要的是使用某种数据结构来存储创建的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.

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

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

您正在用dict覆盖layerContainer函数,因此在调用此函数一次之后,就不能再作为函数访问layerContainer了

相关问题 更多 >

    热门问题