تکمیل کد IDE

«محیط‌های توسعه یکپارچه» (IDE) مانند VS Code و PyCharm تکمیل کد داخلی برای زبان Python ارائه می‌دهند.

کتابخانه google-ads-python کلاس‌های پیام protobuf را به‌صورت پویا در زمان اجرا بااستفاده از روش‌های دریافت‌کننده در کلاس GoogleAdsClient تولید می‌کند که می‌تواند ویژگی‌های تکمیل کد IDE را که به تجزیه‌وتحلیل ایستا کد منبع متکی هستند مهار کند.

برای بهبود سازگاری با ابزارهای تکمیل کد که به تحلیل ایستا متکی هستند، می‌توانید:

  1. از حاشیه‌نویسی‌های نوع با روش‌های گیرنده پویا استفاده کنید (توصیه می‌شود).
  2. کلاس‌های پیام protobuf و کارخواه‌های سرویس را مستقیماً وارد کنید.

وارد کردن پویا با اشاره‌های نوع

استفاده از وارد کردن‌های پویا تضمین می‌کند که کد شما در به‌روزرسانی‌های کتابخانه پایدار باقی می‌ماند. افزودن حاشیه‌نویسی‌های نوع، تکمیل کد IDE را بدون ازدست دادن مزایای مقداردهی اولیه پویا ممکن می‌سازد:

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

واردات مستقیم

همچنین می‌توانید کلاس‌های پیام protobuf را مستقیماً وارد کنید. این رویکرد امکان تکمیل کد IDE را بدون استفاده از روش‌های getter فراهم می‌کند:

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

معایب وارد کردن مستقیم

درحالی‌که وارد کردن مستقیم کلاس‌های تولیدشده به تکمیل کد کمک می‌کند، این کار معایبی هم دارد:

  1. مکان‌یابی دشوارتر: همیشه مشخص نیست که یک کلاس معین در کدام ماژول قرار دارد، بنابراین پیدا کردن مسیر وارد کردن صحیح می‌تواند دشوار باشد.
  2. شکننده در ارتقاها: ساختار دایرکتوری کلاس‌های تولیدشده می‌تواند با نسخه‌های جدید کتابخانه کارخواه تغییر کند. اگر کلاس‌ها را مستقیماً وارد کنید، ممکن است کد شما هنگام ارتقا خراب شود، درحالی‌که کدی که از روش‌های گیرنده استفاده می‌کند تحت تأثیر این نوع تغییرات قرار نمی‌گیرد.
  3. مقداردهی اولیه دستی الزامی است: روش get_service سرویس‌ها را با اصالت‌سنجی، تنظیمات انتقال، و رهگیرهای gRPC مقداردهی اولیه می‌کند (که سرایندهایی مثل login-customer-id و linked-customer-id را پیوست می‌کنند، گزارش‌گیری را مدیریت می‌کنند، و خطاها را در GoogleAdsException می‌پیچند) و سپس آن‌ها را برمی‌گرداند. اگر سرویس‌ها را مستقیماً وارد و نمونه‌سازی کنید، آن رهگیرها دور زده می‌شوند و باید اعتبارنامه‌ها و کانال‌های انتقال را به‌صورت دستی پیکربندی کنید:

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