Автодополнение кода IDE

Такие IDE, как VS Code и PyCharm, предлагают встроенное автодополнение кода для языка Python.

Библиотека google-ads-python динамически генерирует классы сообщений protobuf во время выполнения, используя методы получения в классе GoogleAdsClient , что может подавлять функции автодополнения кода IDE, которые полагаются на статический анализ исходного кода.

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

  • Использование динамически импортируемых классов сообщений Protobuf. Этот подход обычно несовместим с инструментами автодополнения кода.

    from google.ads.googleads.client import GoogleAdsClient
    
    client = GoogleAdsClient.load_from_storage()
    
    # The Campaign class is imported dynamically, preventing the IDE from
    # reading the class definition.
    campaign = client.get_type("Campaign")
    
  • Использование напрямую импортированных классов сообщений Protobuf. Такой подход позволяет использовать инструменты автодополнения кода.

    from google.ads.googleads.v22.resources import Campaign
    
    # The Campaign class is imported directly, enabling the IDE to read the
    # class definition and make code completion suggestions.
    campaign = Campaign()
    

Хотя прямой импорт сгенерированных классов помогает при автодополнении кода, он также имеет некоторые недостатки:

  1. Не всегда очевидно, в каком модуле находится данный класс, поэтому поиск правильного пути импорта может оказаться затруднительным.
  2. Структура каталогов сгенерированных классов может меняться в новых версиях клиентской библиотеки. Если вы импортируете классы напрямую, ваш код может быть сломан при обновлении, тогда как код, использующий методы-геттеры, не будет затронут подобными изменениями.
  3. Метод get_service инициализирует сервисы перед их возвратом. При прямом импорте сервисов их необходимо инициализировать вручную перед выполнением запросов.