تابع 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
سوالات متداول
-
تفاوت تابع isinstance و type چیست؟
تابع type فقط نوع دقیق (Exact Type) یک شیء را بررسی میکند و وراثت را در نظر نمیگیرد؛ در حالی که isinstance زمانی ترجیح داده میشود که بخواهید زیرکلاسها (subclass) نیز بررسی شوند.
-
آیا تابع isinstance از type سریعتر است یا کندتر؟
بهطور کلی، تابع type سریعتر است چون بررسی سادهتری انجام میدهد؛ اما isinstance انعطافپذیرتر است و در بیشتر مواقع به دلیل پشتیبانی از وراثت، گزینه پیشنهادی محسوب میشود.
-
آیا میتوان از تابع isinstance همراه با کلاسهای پایه انتزاعی استفاده کرد؟
بله، تابع isinstance را میتوان همراه با کلاسهای پایه انتزاعی (Abstract Base Classes) استفاده کرد. این موضوع هنگام کار با رابطها (Interfaces) یا کلاسهای انتزاعی از طریق ماژول abc بسیار رایج است.
جهت کسب اطلاعات بیشتر میتوانید به مستندات رسمی پایتون برای تابع isinstance مراجعه کنید.