בסביבות פיתוח משולבות (IDE) כמו VS Code ו-PyCharm יש השלמת קוד מובנית לשפת Python.
הספרייה google-ads-python יוצרת מחלקות של הודעות protobuf באופן דינמי בזמן הריצה באמצעות שיטות getter במחלקה GoogleAdsClient. זה יכול להפריע לתכונות של השלמת קוד בסביבת הפיתוח המשולבת (IDE) שמסתמכות על ניתוח סטטי של קוד המקור.
כדי לשפר את התאימות עם כלים להשלמת קוד שמסתמכים על ניתוח סטטי, אפשר:
- להשתמש בהערות מסוגים שונים עם שיטות getter דינמיות (מומלץ).
- מייבאים ישירות מחלקות של הודעות 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()
החסרונות של ייבוא ישיר
ייבוא ישיר של מחלקות שנוצרו עוזר להשלמת קוד, אבל יש לו גם חסרונות:
- קשה יותר לאתר: לא תמיד ברור באיזה מודול נמצאת מחלקה מסוימת, ולכן יכול להיות קשה למצוא את נתיב הייבוא הנכון.
- שביר בשדרוגים: מבנה הספריות של מחלקות שנוצרו יכול להשתנות בגרסאות חדשות של ספריית הלקוח. אם מייבאים מחלקות ישירות, הקוד עלול להשתבש כשמשדרגים, ואילו קוד שמשתמש בשיטות getter לא מושפע מסוגי השינויים האלה.
נדרש אתחול ידני: השיטה
get_serviceמאתחלת שירותים עם אימות, הגדרות תעבורה ו-gRPC interceptors (שמצרפים כותרות כמוlogin-customer-idו-linked-customer-id, מטפלים ברישום ביומן ועוטפים שגיאות ב-GoogleAdsException) לפני שהם מוחזרים. אם מייבאים שירותים ויוצרים להם מופעים באופן ישיר, המערכת עוקפת את ה-interceptors האלה וצריך להגדיר את פרטי הכניסה וערוצי התעבורה באופן ידני: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, )