Я нежно люблю именованный кортеж (
namedtuple), даже цикл заметок о нем написал. Он компактный, неизменяемый и полностью совместим с обычными tuple и list. Идеально подходит для представления данных из файла или базы:from collections import namedtuple
Pet = namedtuple("Pet", ("type", "name", "age"))
frank = Pet("pigeon", "Френк", 3)
print(frank)
# Pet(type='pigeon', name='Френк', age=3)
print(list(frank))
# ['pigeon', 'Френк', 3]
values = ('pigeon', 'Френк', 3)
frank = Pet(*values)
print(frank)
# Pet(type='pigeon', name='Френк', age=3)
Неплохо. Только вот объявление класса через
namedtuple(...) и выглядит не очень, и совсем не сочетается с современной системой типов в питоне.К счастью, в модуле
typing есть класс NamedTuple, который позволяет нормально работать с именованными кортежами, словно с какими-нибудь дата-классами:from typing import NamedTuple, Optional
class Pet(NamedTuple):
type: str
name: Optional[str]
age: int = 1
frank = Pet("pigeon", "Френк", 3)
print(frank)
# Pet(type='pigeon', name='Френк', age=3)
Здорово, а?
документация • песочница
#stdlib