تابع isinstance

آخرین به‌روزرسانی: ۲۳ اردیبهشت ۱۴۰۵

تابع isinstance در پایتون یک تابع پیش‌ساخته (built-in) است که بررسی می‌کند یک شیء یا آبجکت، نمونه‌ای از یک کلاس مشخص یا یکی از زیرکلاس‌های آن است یا نه. این تابع، ابزاری انعطاف‌پذیر برای بررسی نوع داده در پایتون محسوب می‌شود،‌ زیرا رابطه بین کلاس‌های والد و فرزند (subclass) را نیز در نظر می‌گیرد.

سینتکس تابع isinstance

سینتکس کلی تابع isinstance به صورت زیر است:

isinstance(object, classinfo)

پارامترها یا آرگومان‌های این سینتکس عبارتند از:

  • آرگومان object می‌تواند هر آبجکت پایتونی باشد.
  • آرگومان classinfo یک کلاس یا تاپلی از چند کلاس است که می‌خواهیم عضویت object را در آنها بررسی کنیم.

مقدار بازگشتی تابع پایتونی isinstance یک بولین خواهد بود:

  • در صورتی که object نمونه‌ای از کلاس یا کلاس‌های وارد شده یا هر کدام از کلاس‌های فرزند آنها باشد، مقدار True بر می‌گردد.
  • در غیر این صورت، مقدار False باز می‌گردد.

کاربردهای تابع isinstance

ساده‌ترین مثال از کاربرد این تابع می‌تواند حالت زیر باشد:

>>> isinstance(3.14, float)
True
>>> isinstance(3.14, int)
False

یا می‌توان چند کلاس مختلف را در قالب یک تاپل به تابع داد:

>>> isinstance(42, (int, float))
True

در صورتی که آبجکت مدنظر، نمونه‌ای از هر کدام آنها یا فرزندانشان باشد، مقدار بازگشتی تابع True خواهد بود.

رایج‌ترین کاربردهای تابع isinstance عبارتند از:

  • بررسی صریح نوع داده‌ها در شرط‌ها و دستورات کنترلی،
  • اطمینان از اینکه داده‌های ورودی با نوع داده مورد انتظار مطابقت دارند،
  • اعتبارسنجی آرگومان‌ها در توابع و متدها.

مثال واقعی از تابع isinstance

در یک سناریوی فرضی، شما می‌خواهید تابعی تعریف کنید که انواع مختلف داده‌های عددی را پردازش کند. با استفاده از تابع isinstance می‌توانید مطمئن شوید که داده ورودی از تایپ مدنظر شما باشد:

def process_number(number):
    if isinstance(number, (int, float)):
        return number ** 2
    else:
        raise TypeError("the input must be an int or float")

در این مثال، تابع isinstance به شما اطمینان می‌دهد که متغیر ورودی به تابع process_number، یک عدد صحیح یا اعشاری باشد. در غیر این صورت، خطای TypeError نمایش می‌دهد.

>>> process_number(4)
16
>>> process_number(4.5)
20.25
>>> process_number("4")
Traceback (most recent call last):
    ...
TypeError: the input must be an int or float

سوالات متداول

  1. تفاوت تابع isinstance و type چیست؟

    تابع type فقط نوع دقیق (Exact Type) یک شیء را بررسی می‌کند و وراثت را در نظر نمی‌گیرد؛ در حالی که isinstance زمانی ترجیح داده می‌شود که بخواهید زیرکلاس‌ها (subclass) نیز بررسی شوند.

  2. آیا تابع isinstance از type سریع‌تر است یا کندتر؟

    به‌طور کلی، تابع type سریع‌تر است چون بررسی ساده‌تری انجام می‌دهد؛ اما isinstance انعطاف‌پذیرتر است و در بیشتر مواقع به دلیل پشتیبانی از وراثت، گزینه پیشنهادی محسوب می‌شود.

  3. آیا می‌توان از تابع isinstance همراه با کلاس‌های پایه انتزاعی استفاده کرد؟

    بله، تابع isinstance را می‌توان همراه با کلاس‌های پایه انتزاعی (Abstract Base Classes) استفاده کرد. این موضوع هنگام کار با رابط‌ها (Interfaces) یا کلاس‌های انتزاعی از طریق ماژول abc بسیار رایج است.

جهت کسب اطلاعات بیشتر می‌توانید به مستندات رسمی پایتون برای تابع isinstance مراجعه کنید.


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مشاوره رایگان

علاقمند به یادگیری طراحی سایت یا دنبال مشاوره در این زمینه هستی؟