आप जांचना चाहते हैं कि क्या कोई वस्तु है
कुछ परिस्थितियों में संख्या की तरह काम करता है
यदि आप पायथन 2.5 या पुराने का उपयोग कर रहे हैं, तो एकमात्र वास्तविक तरीका उन "कुछ परिस्थितियों" की जांच करना और देखना है।
2.6 या बेहतर में, आप नंबरों केisinstance
साथ उपयोग कर सकते हैं। निंबर - एक सार बेस क्लास (एबीसी) जो इस उद्देश्य के लिए बिल्कुल मौजूद है (बहुत अधिक एबीसी collections
संग्रह / कंटेनरों के विभिन्न रूपों के लिए मॉड्यूल में मौजूद हैं , फिर से 2.6 के साथ शुरू होता है; और;) केवल उन रिलीज में भी, आप आसानी से अपने स्वयं के सार आधार वर्गों को जोड़ सकते हैं यदि आपको आवश्यकता है)।
2.5 और उससे पहले बाख, "को जोड़ा जा सकता है 0
और यह चलने योग्य नहीं है" कुछ मामलों में एक अच्छी परिभाषा हो सकती है। लेकिन, क्या तुम सच में अपने आप से पूछना करने के लिए, कि यह क्या है कि आप पूछ रहे हैं कि क्या आप पर विचार करना चाहते "एक नंबर" निश्चित रूप से करने के लिए सक्षम होना चाहिए की जरूरत करना है, और क्या यह बिल्कुल होना चाहिए असमर्थ और जाँच - क्या करना है।
2.6 या बाद में इसकी आवश्यकता हो सकती है, शायद अपने स्वयं के पंजीकरण बनाने के उद्देश्य से आप उन प्रकारों को जोड़ते हैं जिनके बारे में आप पहले से पंजीकृत नहीं हैं numbers.Numbers
- यदि आप कुछ प्रकारों को बाहर करना चाहते हैं जो दावा करते हैं कि वे संख्याएं हैं, लेकिन आप बस नहीं संभाल सकता है, कि और भी अधिक देखभाल करता है, क्योंकि एबीसी के पास कोई unregister
तरीका नहीं है [[उदाहरण के लिए आप अपना खुद का एबीसी बना सकते हैं WeirdNum
और वहां इस तरह के सभी अजीब-से-प्रकार दर्ज कर सकते हैं, फिर isinstance
आगे बढ़ने से पहले जमानत के लिए पहले जांच लें isinstance
सामान्य रूप numbers.Number
से सफलतापूर्वक जारी रखने के लिए जाँच करना।
BTW, अगर और जब आपको जांचने की आवश्यकता है x
कि क्या कुछ कर सकते हैं या नहीं कर सकते हैं, तो आपको आम तौर पर कुछ ऐसा करने की कोशिश करनी होगी:
try: 0 + x
except TypeError: canadd=False
else: canadd=True
__add__
प्रति se की उपस्थिति आपको कुछ भी उपयोगी नहीं बताती है, जैसे कि सभी अनुक्रमों में अन्य अनुक्रमों के साथ संयोजन के उद्देश्य से है। यह चेक परिभाषा के बराबर है "एक संख्या कुछ ऐसी है कि इस तरह की चीजों का एक क्रम अंतर्निहित फ़ंक्शन के लिए एक वैध एकल तर्क है sum
", उदाहरण के लिए। पूरी तरह से अजीब प्रकार (उदाहरण के लिए, जो 0 में अभिव्यक्त होने पर "गलत" अपवाद को बढ़ाते हैं, जैसे कि, कहते हैं, एक ZeroDivisionError
या ValueError
सी) अपवाद का प्रचार करेंगे, लेकिन यह ठीक है, उपयोगकर्ता को ASAP बताएं कि ऐसे पागल प्रकार केवल अच्छे में स्वीकार्य नहीं हैं कंपनी ;-); लेकिन, एक "वेक्टर" जो एक स्केलर के लिए योग्य है (पायथन के मानक पुस्तकालय में एक नहीं है, लेकिन निश्चित रूप से वे तीसरे पक्ष के एक्सटेंशन के रूप में लोकप्रिय हैं) यहां भी गलत परिणाम देगा, इसलिए (जैसे"अनुमति नहीं दी जा सकती है" एक (उदाहरण के लिए, चेक जो iter(x)
उठाता है TypeError
, या विशेष पद्धति की उपस्थिति के लिए __iter__
- यदि आप 2.5 या इससे पहले के हैं और इस प्रकार आपको अपने स्वयं के चेक की आवश्यकता है)।
इस तरह की जटिलताओं पर एक संक्षिप्त झलक आपको जब भी संभव हो, सार आधार वर्गों पर भरोसा करने के लिए प्रेरित करने के लिए पर्याप्त हो सकती है ... ;-)।