השלמת קוד ב-IDE

סביבות פיתוח משולבות (IDE) כמו VS Code ו-PyCharm מציעות השלמת קוד מובנית לשפת Python.

הספרייה google-ads-python יוצרת באופן דינמי מחלקות של הודעות protobuf בזמן ריצה באמצעות שיטות getter במחלקה GoogleAdsClient, מה שיכול להפריע לתכונות של השלמת קוד בסביבת פיתוח משולבת (IDE) שמסתמכות על ניתוח סטטי של קוד המקור.

כדי לשפר את התאימות לכלי השלמת קוד שמסתמכים על ניתוח סטטי, אפשר לייבא ישירות מחלקות של הודעות protobuf, במקום להשתמש בשיטות getter.

  • שימוש במחלקות של הודעות protobuf שיובאו באופן דינמי. הגישה הזו בדרך כלל לא תואמת לכלים להשלמת קוד.

    from google.ads.googleads.client import GoogleAdsClient
    
    client = GoogleAdsClient.load_from_storage()
    
    # The Campaign class is imported dynamically, preventing the IDE from
    # reading the class definition.
    campaign = client.get_type("Campaign")
    
  • שימוש במחלקות הודעות של protobuf שיובאו ישירות. הגישה הזו מאפשרת לכלי השלמת קוד לפעול.

    from google.ads.googleads.v23.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 מאתחלת שירותים לפני שהיא מחזירה אותם. אם מייבאים שירותים ישירות, צריך לאתחל אותם באופן ידני לפני ששולחים בקשות.