2021-02-02 11:00:33
Именованные кортежи или namedtupleТип namedtuple определен в стандартном модуле collections. Этот класс расширяет понятие кортежа, добавляя ему и его полям имена и, таким образом, наделяя их смысловой нагрузкой. Он позволяет писать более читаемый и самодокументируемый код.
nametuple можно использовать и как обычный кортеж, или получать доступ к полям по именам, а не только индексам.
Вывоз конструктора
namedtuple по сути вернет новый тип с определенными настройками. Пример:
from collections import namedtuple
# новый класс User с полями name и phone
User = namedtuple('User', ['name', 'phone'])
# конкретный юзер - экземпляр
user1 = User('John', phone='+79991002030')
print(user1) # User(name='John', phone='+79991002030')
Первый аргумент
namedtuple – название класса, а второй – список параметров, который также может быть и строкой типа 'name, phone' или даже 'name phone'. Имена полей любые, кроме зарезервированных слов и имен, начинающихся с подчеркивания.
Работа с
namedtuple:
>> Point = namedtuple('Point', ['x', 'y'])
>> p = Point(x=11, y=22) # создание
>>> p[0] + p[1] # доступ по индексам
33
>>> p.x + p.y # доступ по именам
33
>>> x, y = p # распаковка, как обычный кортеж
>>> x, y
(11, 22)
>>> p # читабельное repr
Point(x=11, y=22)
>>> Point._make((22, 33)) # создание из обычного кортежа или другого итерируемого объекта
Point(x=22, y=33)
>>> p._asdict() # представление в форме словаря
{'x': 11, 'y': 22}
Название двух последних начинаются с подчеркивания, это не значит, что мы вызываем приватные методы, это сделано намеренно, чтобы избежать конфликта с именами полей, если вдруг вам пришло бы в голову назвать поле "
asdict".
Кроме описанных выше возможностей,
namedtuple позволяет также:
1. Задавать значения поле по умолчанию
2. Добавлять док-стринги (подсказки) к самому классу и отдельным полям
3. Создавать копии кортежа с заменой полей
4. Расширять функциональность путем наследования
Об этим возможностях расскажу в следующем посте.
732 views08:00