Автодополнение кода 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.v23.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 инициализирует сервисы перед их возвратом. Если вы импортируете сервисы напрямую, вам потребуется инициализировать их вручную перед отправкой запросов.