A namedtuple (из библиотеки коллекций) может соответствовать вашим целям.Это в основном кортеж, который позволяет ссылаться на поля по имени, а также по позиции индекса.Так что это фиксированная структура упорядоченных именованных полей.Он также облегчен тем, что использует slots
для определения имен полей, что исключает необходимость носить словарь в каждом случае.
Типичным вариантом использования является определение точки:
from collections import namedtuple
Point = namedtuple("Point", "x y")
p1 = Point(x=11, y=22)
Его главный недостаток в том, что, будучи кортежем, он неизменен.Но есть метод replace
, который позволяет заменить одно или несколько полей новыми значениями, но в процессе создается новый экземпляр.
Существует также изменяемая версия namedtuple, доступная в ActiveState Python Recipes 576555, называемая records , которая разрешает прямые изменения полей.Я использовал его и могу подтвердить, что он хорошо работает.