في Python ، يتم استخدام نوع الدوال المضمنة () و isinstance () للحصول على نوع كائن والتحقق منه ، مثل المتغير ، ولتحديد ما إذا كان من نوع معين.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
يتم شرح المحتويات التالية هنا ، إلى جانب نموذج التعليمات البرمجية.
- الحصول والتحقق من نوع الكائن:
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