VS Code और PyCharm जैसे IDE, Python भाषा के लिए कोड पूरा करने की सुविधा देते हैं.
The google-ads-python लाइब्रेरी, रनटाइम के दौरान GoogleAdsClient क्लास पर getter तरीकों का इस्तेमाल करके, protobuf मैसेज क्लास डाइनैमिक तरीके से जनरेट करती है. इससे, IDE की कोड पूरा करने की उन सुविधाओं पर असर पड़ सकता है जो सोर्स कोड के स्टैटिक विश्लेषण पर निर्भर करती हैं.
getter तरीकों का इस्तेमाल करने के बजाय, protobuf मैसेज क्लास को सीधे इंपोर्ट करके, स्टैटिक विश्लेषण पर निर्भर रहने वाले कोड पूरा करने के टूल के साथ बेहतर तरीके से काम किया जा सकता है.
डाइनैमिक तरीके से इंपोर्ट की गई 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.v25.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तरीका, सेवाओं को वापस करने से पहले उन्हें शुरू करता है. अगर सेवाओं को सीधे इंपोर्ट किया जाता है, तो अनुरोध करने से पहले आपको उन्हें मैन्युअल तरीके से शुरू करना होगा.