إكمال الرموز البرمجية في بيئة التطوير المتكاملة (IDE)

توفر بيئات التطوير المتكاملة (IDEs) مثل VS Code وPyCharm ميزة الإكمال التلقائي للرموز البرمجية المضمّنة للغة Python.

تنشئ مكتبة google-ads-python فئات رسائل protobuf بشكل ديناميكي في وقت التشغيل باستخدام طرق إرجاع القيمة في فئة GoogleAdsClient، ما قد يعيق ميزات الإكمال التلقائي للرموز البرمجية في IDE التي تعتمد على التحليل الثابت لـ الرمز المصدر.

لتحسين التوافق مع أدوات الإكمال التلقائي للرموز البرمجية التي تعتمد على التحليل الثابت، يمكنك إجراء أحد الإجراءَين التاليَين:

  1. استخدِم تعليقات توضيحية للأنواع مع طرق getter الديناميكية (ننصحك بهذا الخيار).
  2. استورِد فئات رسائل protobuf وعملاء الخدمات مباشرةً.

عمليات الاستيراد الديناميكية مع تلميحات الأنواع

يضمن استخدام عمليات الاستيراد الديناميكية بقاء الرمز البرمجي مرنًا عند إجراء تعديلات على المكتبة. تتيح إضافة تعليقات توضيحية للأنواع ميزة الإكمال التلقائي للرموز البرمجية في بيئة التطوير المتكاملة بدون فقدان مزايا الإعداد الديناميكي:

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 بدون استخدام طرق إرجاع القيمة:

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. هشاشة الأداء عند إجراء الترقيات: يمكن أن يتغيّر هيكل دليل الفئات التي تم إنشاؤها مع الإصدارات الجديدة من مكتبة العميل. إذا استوردت الفئات مباشرةً، قد يتوقف الرمز البرمجي عن العمل عند إجراء الترقية، بينما لا يتأثر الرمز البرمجي الذي يستخدم طرق getter بهذه الأنواع من التغييرات.
  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,
    )