Completamento del codice IDE

IDE come VS Code e PyCharm offrono il completamento automatico del codice integrato per il linguaggio Python.

La libreria google-ads-python genera dinamicamente 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.

Puoi migliorare la compatibilità con gli strumenti di completamento del codice che si basano sull'analisi statica importando direttamente le classi di messaggi protobuf, anziché utilizzare i metodi getter.

  • Utilizzo di classi di messaggi protobuf importate dinamicamente. Questo approccio in genere non è compatibile con gli strumenti di completamento del codice.

    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")
    
  • Utilizzo di classi di messaggi protobuf importate direttamente. Questo approccio consente il funzionamento degli strumenti di completamento del codice.

    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()
    

Sebbene l'importazione diretta delle classi generate aiuti a completare il codice, presenta anche alcuni svantaggi:

  1. Non è sempre ovvio in quale modulo si trova una determinata classe, quindi trovare il percorso di importazione corretto può essere difficile.
  2. La struttura delle directory delle classi generate può cambiare con le nuove versioni della libreria client. Se importi le classi direttamente, il tuo codice potrebbe smettere di funzionare quando esegui l'upgrade, mentre il codice che utilizza i metodi getter non sarà interessato da questi tipi di modifiche.
  3. Il metodo get_service inizializza i servizi prima di restituirli. Se importi i servizi direttamente, devi inizializzarli manualmente prima di effettuare richieste.