Les IDE tels que VS Code et PyCharm proposent une complétion de code intégrée pour le langage Python.
La bibliothèque google-ads-python génère des classes de messages protobuf de manière dynamique
au moment de l'exécution à l'aide de méthodes getter sur la classe GoogleAdsClient,
ce qui peut inhiber les fonctionnalités de complétion de code de l'IDE qui reposent sur l'analyse statique du
code source.
Pour améliorer la compatibilité avec les outils de complétion de code qui reposent sur l'analyse statique, vous pouvez procéder de l'une des manières suivantes :
- Utiliser des annotations de type avec des méthodes getter dynamiques (recommandé)
- Importer directement des classes de messages protobuf et des clients de service
Importations dynamiques avec des indications de type
L'utilisation d'importations dynamiques garantit que votre code reste résilient lors des mises à jour de la bibliothèque. L'ajout d'annotations de type permet la complétion de code de l'IDE sans perdre les avantages de l'initialisation dynamique :
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")
Importations directes
Vous pouvez également importer directement des classes de messages protobuf. Cette approche permet la complétion de code de l'IDE prête à l'emploi, sans utiliser de méthodes getter :
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()
Inconvénients des importations directes
Bien que l'importation directe de classes générées facilite la complétion de code, elle présente également certains inconvénients :
- Plus difficile à localiser : il n'est pas toujours évident de déterminer dans quel module se trouve une classe donnée. Il peut donc être difficile de trouver le chemin d'importation approprié.
- Fragilité lors des mises à niveau : la structure de répertoire des classes générées peut changer avec les nouvelles versions de la bibliothèque cliente. Si vous importez directement des classes, votre code peut être interrompu lors de la mise à niveau, tandis que le code qui utilise des méthodes getter n'est pas affecté par ces types de modifications.
Initialisation manuelle requise : la méthode
get_serviceinitialise les services avec l'authentification, les paramètres de transport et les intercepteurs gRPC (qui associent des en-têtes tels quelogin-customer-idetlinked-customer-id, gèrent la journalisation et encapsulent les erreurs dansGoogleAdsException) avant de les renvoyer. Si vous importez et instanciez directement des services, ces intercepteurs sont ignorés et vous devez configurer manuellement les identifiants et les canaux de transport :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, )