IDE-Codevervollständigung

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

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

So verbessern Sie die Kompatibilität mit Codevervollständigungstools, die auf der statischen Analyse basieren:

  1. Verwenden Sie Typannotationen mit dynamischen Getter-Methoden (empfohlen).
  2. Importieren Sie Protobuf-Nachrichtenklassen und Dienstclients direkt.

Dynamische Importe mit Typ-Hinweisen

Durch die Verwendung dynamischer Importe bleibt Ihr Code auch nach Bibliothek-Updates stabil. Wenn Sie Typannotationen hinzufügen, können Sie die Codevervollständigung der IDE nutzen, ohne die Vorteile der dynamischen Initialisierung zu verlieren:

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

Direkte Importe

Sie können Protobuf-Nachrichtenklassen auch direkt importieren. Mit diesem Ansatz ist die Codevervollständigung der IDE sofort verfügbar, ohne dass Getter-Methoden verwendet werden müssen:

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

Nachteile direkter Importe

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

  1. Schwerer zu finden:Es ist nicht immer offensichtlich, in welchem Modul sich eine bestimmte Klasse befindet. Daher kann es schwierig sein, den richtigen Importpfad zu finden.
  2. Instabil bei Upgrades:Die Verzeichnisstruktur generierter Klassen kann sich mit neuen Versionen der Clientbibliothek ändern. Wenn Sie Klassen direkt importieren, kann Ihr Code bei einem Upgrade beschädigt werden. Code, der Getter-Methoden verwendet, ist von diesen Änderungen nicht betroffen.
  3. Manuelle Initialisierung erforderlich:Die Methode get_service initialisiert Dienste mit Authentifizierung, Transporteinstellungen und gRPC-Interzeptoren (die Header wie login-customer-id und linked-customer-id anhängen, die Protokollierung verarbeiten und Fehler in GoogleAdsException verpacken), bevor sie zurückgegeben werden. Wenn Sie Dienste direkt importieren und instanziieren, werden diese Interzeptoren umgangen und Sie müssen Anmeldedaten und Transportkanäle manuell konfigurieren:

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