IDE-Codevervollständigung

IDEs wie VS Code und PyCharm bieten eine integrierte Codevervollständigung für die Python-Sprache.

Die google-ads-python-Bibliothek generiert Protobuf-Nachrichtenklassen dynamisch zur Laufzeit mithilfe von Getter-Methoden für die GoogleAdsClient-Klasse. Dies kann die Codevervollständigungsfunktionen von IDEs beeinträchtigen, die auf der statischen Analyse von Quellcode basieren.

Sie können die Kompatibilität mit Tools zur Codevervollständigung, die auf statischer Analyse basieren, verbessern, indem Sie Protobuf-Nachrichtenklassen direkt importieren, anstatt Getter-Methoden zu verwenden.

  • Dynamisch importierte Protobuf-Nachrichtenklassen verwenden Dieser Ansatz ist in der Regel nicht mit Tools zur Vervollständigung von Code kompatibel.

    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")
    
  • Direkt importierte Protobuf-Nachrichtenklassen verwenden. Dieser Ansatz ermöglicht die Verwendung von Tools zur Vervollständigung von Code.

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

Das direkte Importieren generierter Klassen erleichtert zwar die Codevervollständigung, hat aber auch einige Nachteile:

  1. Es ist nicht immer offensichtlich, in welchem Modul sich eine bestimmte Klasse befindet. Daher kann es schwierig sein, den richtigen Importpfad zu finden.
  2. Die Verzeichnisstruktur der generierten Klassen kann sich mit neuen Versionen der Clientbibliothek ändern. Wenn Sie Klassen direkt importieren, kann es sein, dass Ihr Code bei einem Upgrade nicht mehr funktioniert. Code, der Getter-Methoden verwendet, ist von diesen Änderungen nicht betroffen.
  3. Die Methode get_service initialisiert Dienste, bevor sie zurückgegeben werden. Wenn Sie Dienste direkt importieren, müssen Sie sie manuell initialisieren, bevor Sie Anfragen stellen.