Как отсортировать атрибуты класса в Python?

«Как отсортировать атрибуты класса в Python?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-скриптах на Python для интроспекции и автоматической документации иногда требуется получить атрибуты класса в определённом порядке. Для этого можно использовать vars() или dir() в сочетании с sorted().

Основные методы:

  1. vars() — возвращает __dict__ класса, содержащий только пользовательские атрибуты (без унаследованных и магических).

    class ServiceConfig:
        port = 8080
        name = "api-service"
        version = "1.0"
        timeout = 30
    
    # Сортировка по имени атрибута
    sorted_attrs = sorted(vars(ServiceConfig).items())
    for key, value in sorted_attrs:
        if not key.startswith('__'):
            print(f'{key}: {value}')
    # Вывод:
    # name: api-service
    # port: 8080
    # timeout: 30
    # version: 1.0
  2. dir() — возвращает список всех имён атрибутов, включая унаследованные и магические методы. Требует фильтрации.

    # Фильтрация и сортировка только пользовательских атрибутов
    user_attrs = sorted([attr for attr in dir(ServiceConfig) if not attr.startswith('__')])
    print(user_attrs)  # ['name', 'port', 'timeout', 'version']

Практическое применение в DevOps:

  • Генерация конфигурационных файлов (например, для Ansible или Terraform) из классов-моделей с упорядоченными полями.
  • Создание автоматических отчётов о конфигурации сервисов.
  • Сериализация объектов с предсказуемым порядком полей в JSON/YAML для лучшей читаемости в системах версионирования.