Статья

Namedtuples как альтернатива классам в Python

Еще один лайфхак, который показывает всю красоту Питона.

Namedtuple() в Python – это фабричная функция, доступная в коллекциях. Она позволяет создавать подклассы кортежей с именованными полями. Вы можете получить доступ к значениям в заданном именованном кортеже, используя точечную нотацию и имена полей, как в obj.attr.

Namedtuple в Python был создан для улучшения читаемости кода, предоставляя способ доступа к значениям с использованием описательных имен полей вместо целочисленных индексов, которые в большинстве случаев не дают никакой информации о том, что представляют собой значения. Это делает код более чистым и поддерживаемым.

Namedtuple позволяет в некоторых случаях отказаться от написания классов, сделать код чистым и красивым.

Рассмотрим несколько примеров использования Namedtuple, как альтернативу классам в Питоне:
>>> from collections import namedtuple
>>> Cat = namedtuple('Cat', 'name color')

# наш новый "класс" Cat работает, как и ожидалось:

>>> my_cat = Cat('Barsik', 'black')
>>> my_cat.color
'black'
>>> my_cat.name
'Barsik'

# удобное представление по умолчанию:

>>> my_cat
Car(name='Barsik', color='black')

# как и tuples, namedtuples неизменяемы:

>>> my_cat.color = 'white'
AttributeError: "can't set attribute"
python