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