नया typing
मॉड्यूल में "SupportsInt" (-फ्लैट, -बाइट्स इत्यादि) जैसे नामों के साथ कई ऑब्जेक्ट्स हैं। the documentation page for the module पर नाम और विवरण, यह सुझाव देने के लिए पढ़ा जा सकता है कि आप यह जांच सकते हैं कि कोई ऑब्जेक्ट एक प्रकार का है जो "__int__()
का समर्थन करता है"। लेकिन अगर आप isinstance()
उपयोग करने का प्रयास है, यह एक प्रतिक्रिया यह स्पष्ट है कि है कि कुछ आप करते हैं के लिए होती हैं नहीं है कि बनाता है देता है: दूसरी ओर"प्रोटोकॉल का उपयोग isinstance() के साथ नहीं किया जा सकता है" - क्यों नहीं?
>>> isinstance(5, typing.SupportsInt)
(Traceback omitted)
TypeError: Protocols cannot be used with isinstance().
, आप issubclass()
उपयोग कर सकते हैं:
>>> issubclass((5).__class__, typing.SupportsInt)
True
>>> issubclass(type(5), typing.SupportsInt)
True
इस संदर्भ में "प्रोटोकॉल" क्या है? इस तरह से isinstance()
के उपयोग को अस्वीकार क्यों करता है?
'टाइपिंग' मॉड्यूल का उद्देश्य ** नहीं ** ** उन चेक को करने का तरीका प्रदान करने के लिए है। इसका मतलब उनके एनोटेशन में कार्यों के प्रकार आदि प्रदान करने का एक आम तरीका प्रदान करना है। बतख-टाइपिंग अभी भी वरीयता दी गई है, आप अपने उपयोगकर्ता को यह बताने के लिए उन प्रकारों का उपयोग कर सकते हैं कि फ़ंक्शन का उद्देश्य कैसे कहा जाता है। – Bakuriu
@ बाकुरीयू, लेकिन टाइपिंग मॉड्यूल को स्थिर प्रकार की जांच करने की अनुमति देने के लिए प्रदान किया जाता है, और इसलिए यह मानना उचित है कि यह मशीनरी को पहचानने के लिए प्रदान करेगा (कहें) कि कोई विशेष वस्तु किसी विशेष प्रकार का है या नहीं। अगर मैं टाइपिंग टाइपिंग के रूप में एनोटेटेड पैरामीटर के रूप में 5 को पास करने वाले फ़ंक्शन का आह्वान करता हूं। समर्थन INT, तो एक स्थिर प्रकार परीक्षक कैसे पता चलेगा कि यह मान्य है? – Hammerite