IDEs como VS Code e PyCharm oferecem preenchimento de código integrado para a linguagem Python.
A biblioteca google-ads-python gera classes de mensagens protobuf de forma dinâmica
no tempo de execução usando métodos getter na classe GoogleAdsClient,
o que pode inibir os recursos de preenchimento de código do IDE que dependem da análise estática do
código-fonte.
Para melhorar a compatibilidade com ferramentas de preenchimento de código que dependem da análise estática, você pode:
- Usar anotações de tipo com métodos getter dinâmicos (recomendado).
- Importar classes de mensagens protobuf e clientes de serviço diretamente.
Importações dinâmicas com dicas de tipo
O uso de importações dinâmicas garante que o código permaneça resiliente em atualizações de biblioteca. A adição de anotações de tipo permite o preenchimento de código do IDE sem perder os benefícios da inicialização dinâmica:
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")
Importações diretas
Também é possível importar classes de mensagens protobuf diretamente. Essa abordagem permite o preenchimento de código do IDE sem usar métodos 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()
Desvantagens das importações diretas
Embora a importação direta de classes geradas ajude no preenchimento de código, ela também apresenta algumas desvantagens:
- Mais difícil de localizar:nem sempre é óbvio em qual módulo uma determinada classe está localizada. Por isso, encontrar o caminho de importação correto pode ser difícil.
- Frágil em upgrades:a estrutura de diretório das classes geradas pode mudar com novas versões da biblioteca de cliente. Se você importar classes diretamente, o código poderá ser interrompido ao fazer o upgrade, enquanto o código que usa métodos getter não é afetado por esses tipos de mudanças.
Inicialização manual necessária:o método
get_serviceinicializa serviços com autenticação, configurações de transporte e interceptores gRPC (que anexam cabeçalhos comologin-customer-idelinked-customer-id, processam o registro e envolvem erros emGoogleAdsException) antes de retorná-los. Se você importar e instanciar serviços diretamente, esses interceptores serão ignorados e será necessário configurar as credenciais e os canais de transporte manualmente: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, )