# Feature - Запись в таблице

class axipy.Feature

  Запись в таблице.

  Работа с записью похожа на работу со словарем `dict`. Но также допускает обращение по индексу.

  Примеры.

      feature = Feature({'attr_name': 'value'}, geometry=Point(10, 10), style=PointStyle.create_mi_compat(35, 0))
      # Количество атрибутов
      count = len(feature)
      # Запись значения по ключу
      feature['attr_name'] = 'new_value'
      # Запись значения по индексу
      feature[0] = 'another_value'
      # Чтение значения по ключу
      value = feature['attr_name']
      # Чтение значения по индексу
      another_value = feature[0]
      # Проверка наличия атрибута по ключу
      'attr_name' in feature
      # Проверка наличия атрибута по индексу
      5 in feature
      # Значения атрибутов можно задать словарем или именованными аргументами:
      feature2 = Feature({'name1': 'value1', 'name2': 'value2'})
      # Это эквивалентно
      feature2 = Feature(name1='value1', name2='value2')
      # Получение стиля оформления для геометрии
      style = feature.style
      # Установка нового стиля для геометрии
      feature.style = style
      # Получение геометрии
      point = feature.geometry
      # Установка нового значения для геометрии
      feature.geometry = Point(20, 20)
      # Просмотр всех наименований и значений атрибутов
      for key, value in feature.items():
          print('{} = {}'.format(key, value))
      '''
      >>> attr_name = value
      >>> +geometry = Point pos=(10.0 10.0)
      >>> +style = PointStyle Symbol (35, 0, 8)
      '''

  Примечание

  Для доступа к геометрическому атрибуту и стилю по наименованию можно использовать предопределенные идентификаторы +geometry и +style соответственно:

  - GEOMETRY_ATTR=+geometry

  - STYLE_ATTR=+style

  Конструктор класса:

  `__init__`([properties, geometry, style, id]) | Конструктор класса.

  Свойства:

  `geometry` | Устанавливает или возвращает геометрию записи.
  `id` | Устанавливает или возвращает идентификатор записи в таблице.
  `style` | Устанавливает или возвращает стиль записи.

  Методы:

  `get`(key[, default]) | Возвращает значение заданного атрибута.
  `has_geometry`() | Проверяет, имеет ли запись атрибут с геометрией.
  `has_style`() | Проверяет, имеет ли запись атрибут со стилем.
  `items`() | Возвращает список пар имя — значение.
  `keys`() | Возвращает список имен атрибутов.
  `to_geojson`() | Представляет запись в виде, похожем на 'GeoJSON'.
  `values`() | Возвращает список значений атрибутов.

  Специальные методы:

  `__contains__`(key) | Проверяет наличие атрибута у записи.
  `__eq__`(other) | Оператор равенства (==).
  `__getitem__`(index) | Возвращает значение атрибута по индексу или ключу.
  `__iter__`() | Возвращает итератор по объекту (функция `iter()`).
  `__len__`() | Возвращает количество атрибутов в записи.
  `__setitem__`(index, value) | Присваивает атрибуту значение по индексу или ключу.

  __contains__(key: Union[int, str]) → bool

    Проверяет наличие атрибута у записи.

    Параметры:

      key – Имя или номер атрибута.

  __eq__(other: object) → bool

    Оператор равенства (==).

  __getitem__(index: Union[int, str]) → Any

    Возвращает значение атрибута по индексу или ключу.

    Параметры:

      index – Индекс атрибута или его имя.

  __init__(properties: dict = dict(), geometry: Optional[Geometry] = None, style: Optional[Style] = None, id: Optional[int] = None, **kwargs: Any)

    Конструктор класса.

    Параметры:

      - properties – Значения атрибутов.

      - geometry – Геометрия.

      - style – Стиль.

      - id – Идентификатор.

      - **kwargs – Значения атрибутов.

  __iter__() → Iterator[Any]

    Возвращает итератор по объекту (функция `iter()`).

  __len__() → int

    Возвращает количество атрибутов в записи.

  __setitem__(index: Union[int, str], value: Any)

    Присваивает атрибуту значение по индексу или ключу.

    Параметры:

      - index – индекс атрибута или его имя.

      - value – Присваиваемое значение.

  property geometry: Optional[Geometry]

    Устанавливает или возвращает геометрию записи.

    См.также

    `Feature.has_geometry()`, `GEOMETRY_ATTR`

    Результат:

      Значение геометрического атрибута; или None, если значение пустое или отсутствует.

  get(key: str, default: Optional[Any] = None) → Any

    Возвращает значение заданного атрибута.

    Параметры:

      - key – Имя атрибута.

      - default – Значение по умолчанию.

    Результат:

      Искомое значение, или значение по умолчанию, если заданный атрибут отсутствует.

  has_geometry() → bool

    Проверяет, имеет ли запись атрибут с геометрией.

  has_style() → bool

    Проверяет, имеет ли запись атрибут со стилем.

  property id: int

    Устанавливает или возвращает идентификатор записи в таблице.

    Несохраненные записи в таблице будут иметь отрицательное значение.

    См.также

    `Table.is_modified`, `Table.commit()`

    Результат:

      0 если идентификатор не задан.

  items() → List[Tuple[str, Any]]

    Возвращает список пар имя — значение.

  keys() → List[str]

    Возвращает список имен атрибутов.

  property style: Optional[Style]

    Устанавливает или возвращает стиль записи.

    См.также

    `Feature.has_style()`, `STYLE_ATTR`

    Результат:

      Значение атрибута со стилем; или None, если значение пустое или отсутствует.

  to_geojson() → dict

    Представляет запись в виде, похожем на „GeoJSON“.

  values() → List[Any]

    Возвращает список значений атрибутов.