type(), isinstance() حاصل کرنے کے لیے اور ازگر میں قسم کا تعین کریں۔

کاروبار

Python میں، بلٹ ان فنکشنز type() اور isinstance() کسی چیز کی قسم کو حاصل کرنے اور چیک کرنے کے لیے استعمال کیے جاتے ہیں، جیسے کہ ایک متغیر، اور یہ تعین کرنے کے لیے کہ آیا یہ کسی خاص قسم کا ہے۔

نمونہ کوڈ کے ساتھ مندرجہ ذیل مواد کی وضاحت یہاں کی گئی ہے۔

  • آبجیکٹ کی قسم حاصل کریں اور چیک کریں۔:type()
  • آبجیکٹ کی قسم کا تعین:type(),isinstance()
    • قسم () کا استعمال کرتے ہوئے قسم کا تعین
    • isinstance() کا استعمال کرتے ہوئے قسم کا تعین کریں
    • قسم() اور isinstance() کے درمیان فرق

کسی آبجیکٹ کی قسم کا تعین کرنے کے بجائے، کوئی بھی استثنیٰ ہینڈلنگ یا بلٹ ان فنکشن hasattr() کا استعمال کر سکتا ہے تاکہ یہ معلوم کیا جا سکے کہ آیا کسی شے کے درست طریقے اور صفات ہیں۔

آبجیکٹ کی قسم حاصل کریں اور چیک کریں۔:قسم()

type(object) ایک فنکشن ہے جو دلیل کے طور پر پاس کردہ آبجیکٹ کی قسم کو لوٹاتا ہے۔ اس کا استعمال کسی چیز کی قسم معلوم کرنے کے لیے کیا جا سکتا ہے۔

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

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

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

قسم () کی واپسی کی قدر ایک قسم کی آبجیکٹ ہے جیسے str یا int۔

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

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

آبجیکٹ کی قسم کا تعین:type(),isinstance()

قسم کا تعین کرنے کے لیے type() یا 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

اگر آپ یہ تعین کرنا چاہتے ہیں کہ آیا یہ کئی اقسام میں سے ایک ہے، تو in operator اور tuple یا کئی اقسام کی فہرست استعمال کریں۔

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(object, class) ایک فنکشن ہے جو صحیح لوٹاتا ہے اگر پہلی دلیل کا اعتراض دوسری دلیل کی قسم یا ذیلی طبقے کی مثال ہے۔

دوسری دلیل مختلف اقسام کی ہو سکتی ہے۔ اگر یہ کسی بھی قسم کی مثال ہے تو، سچ واپس آ جاتا ہے۔

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

print(isinstance(100, str))
# False

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

type() کا استعمال کرتے ہوئے قسم کے تعین کی مثال سے ملتا جلتا فنکشن اس طرح لکھا جا سکتا ہے۔

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() کے درمیان فرق

type() اور 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'>

type() کا استعمال کرتے ہوئے قسم کا تعین درست لوٹاتا ہے جب قسمیں مماثل ہوں، لیکن isinstance() سپرکلاسز کے لیے بھی درست لوٹاتا ہے۔

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

یہاں تک کہ معیاری اقسام کے لیے، مثال کے طور پر، بولین قسم کے بول (سچ، غلط) کا خیال رکھنا ضروری ہے۔ bool انٹیجر قسم کا ایک ذیلی طبقہ ہے، لہذا 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