Środowiska IDE, takie jak VS Code i PyCharm, oferują wbudowane uzupełnianie kodu w języku Python.
Biblioteka google-ads-python generuje klasy komunikatów protobuf dynamicznie
w czasie działania programu za pomocą metod pobierających w klasie GoogleAdsClient,
co może utrudniać działanie funkcji uzupełniania kodu w środowisku IDE, które opierają się na statycznej analizie
kodu źródłowego.
Aby zwiększyć zgodność z narzędziami do uzupełniania kodu, które opierają się na analizie statycznej, możesz:
- używać adnotacji typu z dynamicznymi metodami pobierającymi (zalecane);
- importować klasy komunikatów protobuf i klientów usług bezpośrednio.
Importy dynamiczne ze wskazówkami dotyczącymi typów
Używanie importów dynamicznych zapewnia, że kod pozostanie odporny na aktualizacje biblioteki. Dodanie adnotacji typu umożliwia uzupełnianie kodu w środowisku IDE bez utraty korzyści wynikających z inicjowania dynamicznego:
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")
Importy bezpośrednie
Możesz też bezpośrednio importować klasy komunikatów protobuf. To podejście umożliwia uzupełnianie kodu w środowisku IDE bez używania metod pobierających:
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()
Wady importów bezpośrednich
Bezpośrednie importowanie wygenerowanych klas ułatwia uzupełnianie kodu, ale wiąże się też z pewnymi kompromisami:
- Trudniejsze do zlokalizowania: nie zawsze jest oczywiste, w którym module znajduje się dana klasa, dlatego znalezienie prawidłowej ścieżki importu może być trudne.
- Niestabilne w przypadku aktualizacji: struktura katalogów wygenerowanych klas może się zmieniać w nowych wersjach biblioteki klienta. Jeśli importujesz klasy bezpośrednio, kod może przestać działać po aktualizacji, natomiast kod, który używa metod pobierających, nie jest narażony na tego typu zmiany.
Wymagane ręczne inicjowanie: metoda
get_serviceinicjuje usługi z uwierzytelnianiem, ustawieniami transportu i interceptorami gRPC (które dołączają nagłówki takie jaklogin-customer-idilinked-customer-id, obsługują logowanie i opakowują błędy wGoogleAdsException) przed ich zwróceniem. Jeśli importujesz i tworzysz instancje usług bezpośrednio, te interceptory są pomijane i musisz ręcznie skonfigurować dane logowania i kanały transportu: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, )