IDE kod tamamlama

VS Code ve PyCharm gibi IDE'ler, Python dili için yerleşik kod tamamlama özelliği sunar.

google-ads-python kitaplığı, kaynak kodun statik analizine dayanan IDE kod tamamlama özelliklerini engelleyebilecek GoogleAdsClient sınıfındaki getter yöntemlerini kullanarak çalışma zamanında protobuf mesaj sınıflarını dinamik olarak oluşturur.

Statik analize dayalı kod tamamlama araçlarıyla uyumluluğu artırmak için şunlardan birini yapabilirsiniz:

  1. Dinamik getter yöntemleriyle tür ek açıklamaları kullanın (önerilir).
  2. Protobuf mesaj sınıflarını ve hizmet istemcilerini doğrudan içe aktarın.

Tür ipuçlarıyla dinamik içe aktarmalar

Dinamik içe aktarma işlemleri, kodunuzun kitaplık güncellemelerine karşı dayanıklı olmasını sağlar. Tür ek açıklamaları eklemek, dinamik başlatmanın avantajlarını kaybetmeden IDE kod tamamlamayı etkinleştirir:

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

Doğrudan içe aktarmalar

Protobuf mesaj sınıflarını doğrudan da içe aktarabilirsiniz. Bu yaklaşım, alıcı yöntemleri kullanmadan IDE kod tamamlamayı kullanıma hazır hale getirir:

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

Doğrudan içe aktarmanın dezavantajları

Oluşturulan sınıfları doğrudan içe aktarmak kod tamamlama konusunda yardımcı olsa da bazı dezavantajları da vardır:

  1. Bulması daha zordur: Belirli bir sınıfın hangi modülde olduğu her zaman net değildir. Bu nedenle, doğru içe aktarma yolunu bulmak zor olabilir.
  2. Yükseltmelerde kırılganlık: Oluşturulan sınıfların dizin yapısı, istemci kitaplığının yeni sürümleriyle değişebilir. Sınıfları doğrudan içe aktarırsanız yükseltme yaptığınızda kodunuz bozulabilir. Alıcı yöntemlerini kullanan kodlar ise bu tür değişikliklerden etkilenmez.
  3. Manuel başlatma gereklidir: get_service yöntemi, hizmetleri döndürmeden önce kimlik doğrulama, aktarım ayarları ve gRPC araya girenleri (login-customer-id ve linked-customer-id gibi başlıkları ekleyen, günlük kaydını işleyen ve hataları GoogleAdsException ile sarmalayan) kullanarak başlatır. Hizmetleri doğrudan içe aktarıp örneklendirirseniz bu kesiciler atlanır ve kimlik bilgileri ile aktarım kanallarını manuel olarak yapılandırmanız gerekir:

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