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

Наверняка вы сталкивались с ситуацией, когда нужно передать несколько свойств объекта одним куском. Например, информацию о домашнем питомце: тип, кличка и возраст.

Часто создавать отдельный класс под это дело лень, и используют кортежи:

("pigeon", "Френк", 3)
("fox", "Клер", 7)
("parrot", "Питер", 1)


Для большей наглядности подойдёт collections.namedtuple:

from collections import namedtuple

Pet = namedtuple("Pet", "type name age")
frank = Pet(type="pigeon", name="Френк", age=3)

>>> frank.age
3


Но что делать, если одно из свойств надо изменить? Френк стареет, а кортеж-то неизменяемый. Чтобы не пересоздавать его целиком, придумали метод _replace():

>>> frank._replace(age=4)
Pet(type='pigeon', name='Френк', age=4)


А если хотите сделать всю структуру изменяемой — _asdict():

>>> dict(frank._asdict())
{'type': 'pigeon', 'name': 'Френк', 'age': 3}


Удобно!

#stdlib
  • 👍 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 →