Как инициализировать атрибуты экземпляра класса в цикле? Ниже приведен пример того, что я хочу сделать. Представьте себе класс с двадцатью-тридцатью атрибутами. Должен быть эффективный способ установки значений. Нужно ли мне менять атрибуты класса в словаре для этого? Но это будет проблемой, так как я работаю с картой Django, чтобы создать таблицу с классом в этом примере. Заранее спасибо!
class Foo():
fieldA = float()
fieldB = float()
fieldC = float()
fieldD = float()
fieldE = float()
fieldF = float()
# several more field elements
def main():
foo_instance = Foo()
# open here excel file with openpyxl library
wb = openpyxl.load_workbook(BASE_DIR + file, read_only=True, data_only=True)
ws = wb['sheet1']
# I would like to iterate through the instance
for i in range(1,20):
foo.fieldA = float(ws['A{}'.format(i)]) #how to iterate through the attributes from foo instance?
'''
This is the inefficient way:
foo.fieldA = float(ws['A1'])
foo.fieldB = float(ws['A2'])
foo.fieldC = float(ws['A3'])
foo.fieldD = float(ws['A4'])
foo.fieldE = float(ws['A5'])
etc.
'''
if __name__ == "__main__":
main()
Попробуйте помещать переменные в список и итерации через них.
my_list = [fieldA, fieldB] # and so on...
# Set an index
index = 0
# Iterate
for field in my_list:
field = float(ws['A{}'.format(index)])
index += 1 # Increment index each time
Вы даже можете удалить имена переменных и просто использовать индексы списка, такие как my_list[0]
, my_list[1]
т.д., Но это будет зависеть от того, что вам нужно.