Preenchimento automático de código do IDE

Ambientes de desenvolvimento integrado como VS Code e PyCharm oferecem preenchimento automático de código integrado para a linguagem Python.

A biblioteca google-ads-python gera classes de mensagens protobuf dinamicamente em tempo de execução usando métodos getter na classe GoogleAdsClient, o que pode impedir recursos de conclusão de código do IDE que dependem da análise estática do código-fonte.

Para melhorar a compatibilidade com ferramentas de conclusão de código que dependem de análise estática, importe as classes de mensagens protobuf diretamente, em vez de usar métodos getter.

  • Usando classes de mensagens protobuf importadas dinamicamente. Essa abordagem geralmente não é compatível com ferramentas de conclusão de código.

    from google.ads.googleads.client import GoogleAdsClient
    
    client = GoogleAdsClient.load_from_storage()
    
    # The Campaign class is imported dynamically, preventing the IDE from
    # reading the class definition.
    campaign = client.get_type("Campaign")
    
  • Usar classes de mensagens protobuf importadas diretamente. Essa abordagem permite que as ferramentas de conclusão de código funcionem.

    from google.ads.googleads.v22.resources import Campaign
    
    # The Campaign class is imported directly, enabling the IDE to read the
    # class definition and make code completion suggestions.
    campaign = Campaign()
    

Embora a importação direta de classes geradas ajude no preenchimento automático de código, ela também apresenta algumas desvantagens:

  1. Nem sempre é óbvio em qual módulo uma determinada classe está localizada, então encontrar o caminho de importação correto pode ser difícil.
  2. A estrutura de diretórios das classes geradas pode mudar com novas versões da biblioteca de cliente. Se você importar classes diretamente, seu código poderá ser corrompido ao fazer upgrade, enquanto o código que usa métodos getter não será afetado por esses tipos de mudanças.
  3. O método get_service inicializa os serviços antes de retorná-los. Se você importar serviços diretamente, será necessário inicializá-los manualmente antes de fazer solicitações.