В таких IDE, как VS Code и PyCharm, есть встроенная функция автозаполнения кода на языке Python.
Библиотека google-ads-python динамически генерирует классы сообщений protobuf во время выполнения, используя методы получения в классе GoogleAdsClient. Это может препятствовать работе функций автозаполнения кода в IDE, которые используют статический анализ исходного кода.
Чтобы улучшить совместимость с инструментами дополнения кода, которые используют статический анализ, вы можете:
- Используйте аннотации типов с динамическими методами получения (рекомендуется).
- Импортируйте классы сообщений protobuf и сервисные клиенты напрямую.
Динамический импорт с подсказками типов
Динамический импорт позволяет коду оставаться устойчивым при обновлении библиотек. Добавление аннотаций типов позволяет использовать автозаполнение кода в IDE, не теряя преимуществ динамической инициализации:
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.v26.resources.types.campaign import (
Campaign,
)
client = GoogleAdsClient.load_from_storage()
# Type hints allow the IDE to provide code completion suggestions while
# retaining dynamic class generation.
campaign: Campaign = client.get_type("Campaign")
Прямой импорт
Вы также можете импортировать классы сообщений protobuf напрямую. Этот подход позволяет использовать автозаполнение кода в IDE без методов получения:
from google.ads.googleads.v26.resources import Campaign
# The Campaign class is imported directly, enabling the IDE to read the
# class definition and make code completion suggestions.
campaign = Campaign()
Недостатки прямого импорта
Импорт сгенерированных классов помогает при автозаполнении кода, но также имеет некоторые недостатки:
- Сложность поиска. Не всегда очевидно, в каком модуле находится тот или иной класс, поэтому найти правильный путь импорта может быть непросто.
- Нестабильность при обновлениях. Структура каталогов сгенерированных классов может меняться в новых версиях клиентской библиотеки. Если вы импортируете классы напрямую, то при обновлении код может перестать работать. Если же вы используете методы получения, то код не будет затронут.
Требуется инициализация вручную. Метод
get_serviceинициализирует сервисы с аутентификацией, настройками транспорта и перехватчиками gRPC (которые прикрепляют заголовки, такие какlogin-customer-idиlinked-customer-id, обрабатывают ведение журнала и упаковывают ошибки вGoogleAdsException), прежде чем возвращать их. Если вы импортируете и создаете экземпляры сервисов напрямую, эти перехватчики обходятся, и вам необходимо настроить учетные данные и каналы передачи вручную:from google.ads.googleads.v26.services.services import ( campaign_service as campaign_service_module, ) # Dynamic service getter (initializes credentials, transport, and gRPC # interceptors automatically). campaign_service = client.get_service("CampaignService") # Direct service client import (requires manual credential and interceptor # configuration). campaign_service_client = campaign_service_module.CampaignServiceClient( credentials=client.credentials, )