isinstance
जरूरत पड़ने पर आगे बढ़ें और उपयोग करें । यह कुछ हद तक बुराई है, क्योंकि यह कस्टम अनुक्रमों, पुनरावृत्तियों और अन्य चीजों को बाहर करता है जिनकी आपको वास्तव में आवश्यकता हो सकती है। हालांकि, कभी-कभी आपको अलग तरह से व्यवहार करने की आवश्यकता होती है यदि कोई, उदाहरण के लिए, एक स्ट्रिंग पास करता है। मेरी पसंद वहाँ स्पष्ट रूप से str
या के लिए जाँच करने के लिए किया जाएगा unicode
:
import types
isinstance(var, types.StringTypes)
एनबी के types.StringType
लिए गलती मत करो types.StringTypes
। उत्तरार्द्ध शामिल है str
और unicode
वस्तुओं।
types
मॉड्यूल, कई द्वारा माना जाता है सिर्फ वस्तु के प्रकार के खिलाफ सीधे जाँच के पक्ष में अप्रचलित इसलिए यदि आप बल्कि ऊपर का उपयोग नहीं हैं, तो आप वैकल्पिक रूप से स्पष्ट रूप से के खिलाफ जांच कर सकते हैं str
और unicode
, इस तरह:
isinstance(var, (str, unicode)):
संपादित करें:
अभी भी बेहतर है:
isinstance(var, basestring)
अंत संपादित करें
इन दोनों में से किसी के बाद, आप व्यवहार में वापस आ सकते हैं जैसे कि आप एक सामान्य अनुक्रम प्राप्त कर रहे हों, गैर-अनुक्रमों को उचित अपवाद देने दें।
यह देखें कि टाइप चेकिंग के बारे में "बुराई" यह नहीं है कि आप एक निश्चित प्रकार की वस्तु के लिए अलग तरह से व्यवहार करना चाहते हैं, यह है कि आप कृत्रिम रूप से अपने काम को अप्रत्याशित वस्तु प्रकारों के साथ सही काम करने से प्रतिबंधित करते हैं जो अन्यथा सही काम करेंगे। यदि आपके पास एक अंतिम कमबैक है जो टाइप-चेक नहीं किया गया है, तो आप इस प्रतिबंध को हटा दें। यह ध्यान दिया जाना चाहिए कि बहुत अधिक प्रकार की जाँच एक कोड गंध है जो इंगित करती है कि आप कुछ रीफ़ैक्टरिंग करना चाहते हैं, लेकिन इसका मतलब यह नहीं है कि आपको इसे गेटो से बचना चाहिए।