TGViewer
Oh My Py Oh My Py @ohmypy · 2.26K subscribers
Post #131 2.51K
Кортеж здорового человека

Я нежно люблю именованный кортеж (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
  • 👍 67
  • 🔥 16
  • 😢 1
More from @ohmypy
  1. Apr 4, 2023ChatGPT-бот: группы, внешние ссылки, шорткаты Сделать GPT-бота легко, а вот удобного GPT-б…
  2. Mar 11, 2023ChatGPT-бот на Python Последние месяцы поставили рекорд по количеству программ, интегриров…
  3. Aug 3, 2022JSON Lines На днях узнал про формат JSON Lines. Это такой CSV на стероидах: — каждая запис…
  4. Jul 18, 2022Попробуйте Go Чем больше я узнаю Python, тем больше мне нравится Go. Альберт Эйнштейн Нет,…
  5. Jun 1, 2022Многозначительное многоточие Не знаю, заметили вы или нет в посте о протоколах. Не самая и…
  6. May 31, 2022Через протокол Цитата выше взята из PEP 544 (Python Enhancement Proposal, предложение о до…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →