Gli IDE come VS Code e PyCharm offrono il completamento del codice integrato per il linguaggio Python.
La libreria google-ads-python genera dinamicamente le classi di messaggi protobuf
in fase di runtime utilizzando i metodi getter nella classe GoogleAdsClient,
che possono inibire le funzionalità di completamento del codice IDE che si basano sull'analisi statica del
codice sorgente.
Per migliorare la compatibilità con gli strumenti di completamento del codice che si basano sull'analisi statica, puoi:
- Utilizzare le annotazioni di tipo con metodi getter dinamici (opzione consigliata).
- Importare direttamente le classi di messaggi protobuf e i client di servizio.
Importazioni dinamiche con suggerimenti di tipo
L'utilizzo di importazioni dinamiche garantisce che il codice rimanga resiliente agli aggiornamenti della libreria. L'aggiunta di annotazioni di tipo consente il completamento del codice IDE senza perdere i vantaggi dell'inizializzazione dinamica:
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")
Importazioni dirette
Puoi anche importare direttamente le classi di messaggi protobuf. Questo approccio consente il completamento del codice IDE out-of-the-box, senza utilizzare i metodi 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()
Svantaggi delle importazioni dirette
Sebbene l'importazione diretta delle classi generate aiuti a completare il codice, introduce anche alcuni compromessi:
- Più difficile da individuare: non è sempre ovvio in quale modulo si trova una determinata classe, quindi trovare il percorso di importazione corretto può essere difficile.
- Fragile durante gli upgrade: la struttura delle directory delle classi generate può cambiare con le nuove versioni della libreria client. Se importi le classi direttamente, il codice potrebbe non funzionare quando esegui l'upgrade, mentre il codice che utilizza i metodi getter non è interessato da questi tipi di modifiche.
Inizializzazione manuale obbligatoria: il metodo
get_serviceinizializza i servizi con autenticazione, impostazioni di trasporto e intercettori gRPC (che allegano intestazioni comelogin-customer-idelinked-customer-id, gestiscono la registrazione e racchiudono gli errori inGoogleAdsException) prima di restituirli. Se importi e crei un'istanza dei servizi direttamente, questi intercettori vengono ignorati e devi configurare manualmente le credenziali e i canali di trasporto: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, )