# Записи

Запись `axipy.Feature`, которая получается при чтении из таблицы, во многом повторяет словарь Python `dict`. В ней содержатся пары (Имя столбца: Значение). Причем значение приводится к типу столбца. Например, если это числовое поле int, а его значение 42, то запись будет содержать число 42, а не строку “42”.

Прочитанная запись никак не ссылается на таблицу и является копией. Присвоенная к переменной запись будет доступна после продвижения итератора или даже после закрытия таблицы. Но поэтому и изменения, внесенные в эту запись-копию, никак не повлияют на значения в таблице.

## Атрибуты

Доступ к атрибутам осуществляется по имени или номеру. Так же как для словаря, если атрибут с заданным именем не существует, то вызывается исключение `KeyError`. Если атрибут с заданным номером не существует, то вызывается исключение `IndexError`.

    feature = next(table.items())
    try:
        value = feature['attr_name']
    except KeyError as e:
        print(f'Поймано исключение: {e}')

    >>> Поймано исключение: "Key 'unknown_key' not found"

Можно задать значение по умолчанию при чтении атрибута, который может не существовать. Если его не задать, то значение по умолчанию считается равным `None`.

    value = feature.get('attr_name', 0.0)

Проверка существования атрибута с помощью ключевого слова `in` так же, как в словаре:

    if 'attr_name' in feature:
        ...

## Геометрический атрибут

Доступ к специальному атрибуту Геометрия `axipy.Geometry` производится через свойство `axipy.Feature.geometry`.

Или можно использовать специальное наименование `axipy.Feature.GEOMETRY_ATTR`, представляющее имя геометрического атрибута:

    geometry = feature.geometry
    # эквивалентно
    geom = feature[GEOMETRY_ATTR]

Проверка существования `axipy.Feature.has_geometry()`:

    if feature.has_geometry():
        ...
    # эквивалентно
    if GEOMETRY_ATTR in feature:
        ...

## Стиль для геометрического атрибута

Стиль `axipy.Style` может содержаться в виде атрибута. Доступ к нему производится по специальному наименованию `axipy.Feature.`STYLE_ATTR` или свойствам `axipy.Feature.style` и `axipy.Feature.has_style()`.

    style = feature.style
    # эквивалентно
    style = feature[STYLE_ATTR]

    feature.has_style()
    # эквивалентно
    STYLE_ATTR in feature

## Идентификаторы записей

Записи имеют свойство `axipy.Feature.id`. Это значение зависит от типа данных. При этом не гарантируется порядок, начальное значение или отсутствие разрывов между соседними записями. Также идентификатор необязательно является числом.