List[str]
और Sequence[str]
के बीच एक आईएस-ए संबंध क्या होगा जब एनोटेटिंग हो?
यह दूर करने का प्रमुख बिंदु है। यह जांचना कि कोई प्रकार किसी अन्य प्रकार का उप प्रकार है, आमतौर पर ऐसा कुछ नहीं होता है जब आप अपना कोड एनोटेट करते समय कर रहे हों। यह आम तौर पर कुछ ऐसा होता है जिसे देखा गया है और यही वजह है कि the nuking of __subclasscheck__
पर बहस है।
के रूप में मार्क शैनन states in a comment:
यह है कि क्या एक प्रकार का एक प्रकार का एक उप-प्रकार है की जाँच करने के लिए सार्थक है, लेकिन यह एक स्थिर चेकर का काम है और टाइपिंग मॉड्यूल में संबंधित नहीं है।
किसी भी तरह से, चेक all made in GenericMeta
s __subclasscheck__
कर रहे हैं, सामान्य प्रकार
के रूप में है के लिए metaclass, वर्तमान कार्यान्वयन मामलों पर अधिक ध्यान केंद्रित है, जहां कंटेनर प्रकार समान है, लेकिन अपने उप-पटकथा प्रकार इस में, अलग-अलग मामला, उप-स्क्रिप्टेड प्रकार covariant or contravariant हैं, इस पर निर्भर करता है। उदाहरण के लिए, List
प्रकार न तो, जैसे, कर रहे हैं के साथ एक subtype
संबंध के लिए जाँच: झूठी
issubclass(List[bool], List[int]) # checks if bool == int
रिटर्न। (अपने पहले मामले में के रूप में)
issubclass(Sequence[bool], Sequence[int]) # checks if bool is a subclass of int
दूसरी ओर, प्रकार के लिए एक निर्दिष्ट प्रकार के बिना: दृश्यों के लिए, प्रकार covariant, जैसे, निम्नलिखित पैदावार True
रूप
issubclass(List, Sequence)
__subclasscheck__
GenericMeta
में delegate से __subclasscheck__
in ABCMeta
होगा जहां यह True
का मूल्यांकन करेगा।
अंत में, यदि दो प्रकार के अलग हैं के रूप में:
issubclass(List[str], Sequence[str])
और issubclass
call is an instance of GenericMeta
में आधार वर्ग, False
दिया जाता है; यह स्थिति typing
में अधिकांश प्रकारों से संतुष्ट है।
जो भी मामला यह उल्लेखनीय है कि भविष्य में रिलीज में यह अस्तित्व में नहीं है, या इसका व्यवहार पूरी तरह से अलग हो सकता है; मॉड्यूल अभी भी अस्थायी है।
यह क्यों होना चाहिए? 'सूची [str] 'और' अनुक्रम [str] 'उदाहरणों की तरह हैं; जेनेरिक प्रकार के विशिष्ट रूप। 'सूची()' 'abc.equequence()' के उप-वर्ग नहीं है। –
या इसे अलग-अलग रखें: * एनोट-ए के संबंध में 'सूची [str] 'और' अनुक्रम [str] 'के बीच एक आईएस-ए संबंध क्या होगा? –