اكتب () ، isinstance () للحصول على الكتابة وتحديدها في بايثون

اعمال

في Python ، يتم استخدام نوع الدوال المضمنة () و isinstance () للحصول على نوع كائن والتحقق منه ، مثل المتغير ، ولتحديد ما إذا كان من نوع معين.

يتم شرح المحتويات التالية هنا ، إلى جانب نموذج التعليمات البرمجية.

  • الحصول والتحقق من نوع الكائن:type()
  • تحديد نوع الكائن:type(),isinstance()
    • تحديد النوع باستخدام النوع ()
    • تحديد النوع باستخدام isinstance ()
    • الفرق بين type () و 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()

استخدم النوع () أو 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 و 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 (كائن ، فئة) هي وظيفة ترجع صحيحًا إذا كان كائن الوسيطة الأولى هو مثيل من النوع أو الفئة الفرعية للوسيطة الثانية.

يمكن أن تكون الوسيطة الثانية مجموعة من الأنواع. إذا كان مثيلاً من أي نوع ، فسيتم إرجاع true.

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

الفرق بين type () و 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 () إلى إرجاع true فقط عندما تتطابق الأنواع ، لكن isinstance () ترجع صحيحًا حتى بالنسبة للفئات الفائقة.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

حتى بالنسبة للأنواع القياسية ، على سبيل المثال ، النوع المنطقي bool (صواب ، خطأ) ، يجب توخي الحذر. 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