प्रकार (), isinstance () पायथन में प्रकार प्राप्त करने और निर्धारित करने के लिए

व्यापार

पायथन में, अंतर्निहित फ़ंक्शन प्रकार () और isinstance () का उपयोग किसी वस्तु के प्रकार को प्राप्त करने और जांचने के लिए किया जाता है, जैसे कि एक चर, और यह निर्धारित करने के लिए कि क्या यह एक विशेष प्रकार का है।

निम्नलिखित सामग्री को यहां नमूना कोड के साथ समझाया गया है।

  • ऑब्जेक्ट प्रकार प्राप्त करें और जांचें:type()
  • वस्तु प्रकार का निर्धारण:type(),isinstance()
    • प्रकार का उपयोग करके निर्धारण टाइप करें ()
    • isinstance () का उपयोग करके निर्धारण टाइप करें
    • प्रकार () और isinstance () के बीच अंतर

किसी ऑब्जेक्ट के प्रकार को निर्धारित करने के बजाय, यह निर्धारित करने के लिए कि किसी ऑब्जेक्ट में सही तरीके और विशेषताएँ हैं या नहीं, कोई अपवाद हैंडलिंग या अंतर्निहित फ़ंक्शन hasattr() का उपयोग कर सकता है।

ऑब्जेक्ट प्रकार प्राप्त करें और जांचें:प्रकार()

टाइप (ऑब्जेक्ट) एक फ़ंक्शन है जो ऑब्जेक्ट के प्रकार को तर्क के रूप में देता है। इसका उपयोग किसी वस्तु के प्रकार का पता लगाने के लिए किया जा सकता है।

print(type('string'))
# <class 'str'>

print(type(100))
# <class 'int'>

print(type([0, 1, 2]))
# <class 'list'>

टाइप () का रिटर्न वैल्यू एक प्रकार की वस्तु है जैसे कि स्ट्र या इंट।

print(type(type('string')))
# <class 'type'>

print(type(str))
# <class 'type'>

वस्तु प्रकार का निर्धारण:type(),isinstance()

प्रकार निर्धारित करने के लिए प्रकार() या isinstance() का उपयोग करें।

प्रकार का उपयोग करके निर्धारण टाइप करें ()

टाइप () के रिटर्न वैल्यू की मनमानी प्रकार से तुलना करके, यह निर्धारित किया जा सकता है कि ऑब्जेक्ट किसी भी प्रकार का है या नहीं।

print(type('string') is str)
# True

print(type('string') is int)
# False
def is_str(v):
    return type(v) is str

print(is_str('string'))
# True

print(is_str(100))
# False

print(is_str([0, 1, 2]))
# False

यदि आप यह निर्धारित करना चाहते हैं कि यह कई प्रकारों में से एक है, तो इन ऑपरेटर और कई प्रकार की टपल या सूची का उपयोग करें।

def is_str_or_int(v):
    return type(v) in (str, int)

print(is_str_or_int('string'))
# True

print(is_str_or_int(100))
# True

print(is_str_or_int([0, 1, 2]))
# False

तर्क प्रकार के आधार पर प्रसंस्करण को बदलने वाले कार्यों को परिभाषित करना भी संभव है।

def type_condition(v):
    if type(v) is str:
        print('type is str')
    elif type(v) is int:
        print('type is int')
    else:
        print('type is not str or int')

type_condition('string')
# type is str

type_condition(100)
# type is int

type_condition([0, 1, 2])
# type is not str or int

isinstance () का उपयोग करके निर्धारण टाइप करें

isinstance (ऑब्जेक्ट, क्लास) एक ऐसा फ़ंक्शन है जो सत्य लौटाता है यदि पहले तर्क की वस्तु दूसरे तर्क के प्रकार या उपवर्ग का उदाहरण है।

दूसरा तर्क एक प्रकार का टपल हो सकता है। यदि यह किसी भी प्रकार का उदाहरण है, तो सत्य वापस आ जाता है।

print(isinstance('string', str))
# True

print(isinstance(100, str))
# False

print(isinstance(100, (int, str)))
# True

प्रकार () का उपयोग करके प्रकार निर्धारण के उदाहरण के समान एक फ़ंक्शन को निम्नानुसार लिखा जा सकता है

def is_str(v):
    return isinstance(v, str)

print(is_str('string'))
# True

print(is_str(100))
# False

print(is_str([0, 1, 2]))
# False
def is_str_or_int(v):
    return isinstance(v, (int, str))

print(is_str_or_int('string'))
# True

print(is_str_or_int(100))
# True

print(is_str_or_int([0, 1, 2]))
# False
def type_condition(v):
    if isinstance(v, str):
        print('type is str')
    elif isinstance(v, int):
        print('type is int')
    else:
        print('type is not str or int')

type_condition('string')
# type is str

type_condition(100)
# type is int

type_condition([0, 1, 2])
# type is not str or int

प्रकार () और isinstance () के बीच अंतर

प्रकार () और isinstance () के बीच का अंतर यह है कि isinstance () उपवर्गों के उदाहरणों के लिए सही है जो दूसरे तर्क के रूप में निर्दिष्ट वर्ग को विरासत में मिला है।

उदाहरण के लिए, निम्नलिखित सुपरक्लास (बेस क्लास) और सबक्लास (व्युत्पन्न क्लास) को परिभाषित किया गया है

class Base:
    pass

class Derive(Base):
    pass

base = Base()
print(type(base))
# <class '__main__.Base'>

derive = Derive()
print(type(derive))
# <class '__main__.Derive'>

टाइप () का उपयोग करके टाइप निर्धारण केवल तभी सही होता है जब प्रकार मेल खाते हैं, लेकिन isinstance () सुपरक्लास के लिए भी सही होता है।

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

यहां तक ​​​​कि मानक प्रकारों के लिए, उदाहरण के लिए, बूलियन प्रकार बूल (सत्य, गलत), देखभाल की जानी चाहिए। बूल पूर्णांक प्रकार का एक उपवर्ग है, इसलिए isinstance () एक int के लिए भी सही है, जिससे यह विरासत में मिला है।

print(type(True))
# <class 'bool'>

print(type(True) is bool)
# True

print(type(True) is int)
# False

print(isinstance(True, bool))
# True

print(isinstance(True, int))
# True

यदि आप सटीक प्रकार निर्धारित करना चाहते हैं, तो प्रकार () का उपयोग करें; यदि आप खाते में ली गई विरासत के प्रकार को निर्धारित करना चाहते हैं, तो isinstance() का उपयोग करें।

अंतर्निहित फ़ंक्शन issubclass() यह निर्धारित करने के लिए भी प्रदान किया जाता है कि कोई वर्ग किसी अन्य वर्ग का उपवर्ग है या नहीं।

print(issubclass(bool, int))
# True

print(issubclass(bool, float))
# False