Penyelesaian kode IDE

IDE seperti VS Code dan PyCharm menawarkan penyelesaian kode bawaan untuk bahasa Python.

Library google-ads-python menghasilkan class pesan protobuf secara dinamis saat runtime menggunakan metode pengambil di class GoogleAdsClient, yang dapat menghambat fitur penyelesaian kode IDE yang mengandalkan analisis statis kode sumber.

Untuk meningkatkan kompatibilitas dengan alat penyelesaian kode yang mengandalkan analisis statis, Anda dapat:

  1. Gunakan anotasi jenis dengan metode getter dinamis (direkomendasikan).
  2. Impor class pesan protobuf dan klien layanan secara langsung.

Impor dinamis dengan petunjuk jenis

Menggunakan impor dinamis memastikan kode Anda tetap tangguh di seluruh update library. Menambahkan anotasi jenis akan mengaktifkan penyelesaian kode IDE tanpa kehilangan manfaat inisialisasi dinamis:

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

Impor langsung

Anda juga dapat mengimpor class pesan protobuf secara langsung. Pendekatan ini memungkinkan pelengkapan kode IDE secara langsung, tanpa menggunakan metode pengambil:

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

Kekurangan impor langsung

Meskipun mengimpor class yang dibuat secara langsung membantu penyelesaian kode, tindakan ini juga memiliki beberapa kekurangan:

  1. Lebih sulit ditemukan: Tidak selalu jelas di modul mana class tertentu berada, sehingga menemukan jalur impor yang benar bisa jadi sulit.
  2. Rentan terhadap upgrade: Struktur direktori class yang dihasilkan dapat berubah dengan versi baru library klien. Jika Anda mengimpor class secara langsung, kode Anda mungkin rusak saat Anda mengupgrade, sedangkan kode yang menggunakan metode pengambil tidak terpengaruh oleh jenis perubahan ini.
  3. Inisialisasi manual diperlukan: Metode get_service menginisialisasi layanan dengan autentikasi, setelan transpor, dan interceptor gRPC (yang melampirkan header seperti login-customer-id dan linked-customer-id, menangani logging, dan menggabungkan error dalam GoogleAdsException) sebelum menampilkannya. Jika Anda mengimpor dan membuat instance layanan secara langsung, interceptor tersebut akan diabaikan dan Anda harus mengonfigurasi kredensial dan saluran transportasi secara manual:

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