Наверняка вы сталкивались с ситуацией, когда нужно передать несколько свойств объекта одним куском. Например, информацию о домашнем питомце: тип, кличка и возраст.
Часто создавать отдельный класс под это дело лень, и используют кортежи:
("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