Python славится своей гибкостью и простотой, однако иногда возникает необходимость использовать более сложные структуры данных, аналогичные структурам в языке C. Представим, что есть необходимость в создании класса для хранения данных о студенте: его имени, факультете и курсе. Обычный подход будет выглядеть следующим образом:
1 2 3 4 5 | class Student(): def __init__( self , name, faculty, year): self .name = name self .faculty = faculty self .year = year |
Это может стать довольно утомительным, если количество полей увеличивается, или если нужно создать множество подобных классов.
В Python есть несколько способов создания структур данных, аналогичных C-структурам. Один из них — использование модуля collections и его функции namedtuple.
При помощи namedtuple можно создать класс с определенными полями, который будет иметь предопределенные методы, такие как init или repr:
1 2 3 | from collections import namedtuple Student = namedtuple( 'Student' , [ 'name' , 'faculty' , 'year' ]) |
Теперь можно создать экземпляр класса Student так же просто, как и обычный кортеж:
1 | student1 = Student( 'Ivan' , 'Math' , 1 ) |
Поля namedtuple доступны для чтения, как и обычные атрибуты объекта:
1 | print (student1.name) # выводит 'Ivan' |
Таким образом, namedtuple позволяет упростить и ускорить создание классов для хранения данных. Однако следует помнить, что namedtuple, в отличие от обычных классов, не может быть изменен (это неизменяемый тип данных), и не поддерживает добавление новых методов или атрибутов к созданному классу.
Добавить комментарий