آموزش تابع callable پایتون

امیرحسین بیگدلو 1 سال قبل

در پایتون، کلاس‌ها، متدها و آبجکت‌ها قابل فراخوانی هستند. زمانی که کلاسی را فراخوانی میکنید یک آبجکت جدید را برمی‌گرداند. آبجکت ها در صورتی قابل فراخوانی هستند که کلاس آنها متد __call__() را داشته باشد. اگر آبجکت ارسال شده قابل فراخوانی باشد، متد callable() مقدار True و در غیر اینصورت False را برمی‌گرداند.

 

ویدیو پیشنهادی: ویدیو آموزش متد call در پایتون

 

سینتکس این متد به شکل زیر است:

callable(object)

 

تابع callable یک object را به عنوان آرگومان گرفته و قابل فراخوانی بودن آن را بررسی میکند.

 

مثال زیر آبجکت‌ها و متدهای داخلی پایتون را بررسی می کند تا ببیند آیا آنها قابل فراخوانی هستند یا خیر:

print("Is str callable? ", callable(str)) # str class
print("Is len callable? ", callable(len)) # len function
print("Is list callable? ", callable(list)) # list class

num=10
print("Is variable callable? ", callable(num)) 

 

کد بالا نتیجه زیر را میدهد. همانطور که میبینید اعداد را نمیتوان فراخوانی کرد:

# OUTPUT
Is str callable? True
Is len callable? True
Is int callable? True
Is variable callable? False

 

تابع callable را میتوانید برای فانکشن‌ها و کلاس‌های خودتان نیز استفاده کنید:

class student:
    def greet(self):
        print("Hello there")

std = student()
print("Is student class callable? ",callable(student))
print("Is student.greet() callable? ",callable(std.greet))
print("Is student instance callable? ",callable(std))

 

اگر کد بالا را اجرا کنید نتیجه زیر را میدهد:

# Output

Is student class callable? True
Is student.greet() callable? True
Is student instance callable? False

 

در مثال بالا، آبجکت std قابل فراخوانی نیست. فراخوانی آبجکت یک خطا ایجاد می کند. برای اینکه آبجکت قابل فراخوانی باشد، باید متد __call__() را در کلاس Student، مطابق کد زیر، ایجاد کنید:

class student:
    def greet(self):
        print("Hello there")
        
    def __call__(self):
        print("Hello, I am a student.")

std = student()
print("Is student instance callable? ", callable(std))
print(std())

 

حالا اگر کد بالا را اجرا کنید به شکل زیر پاسخ میدهد:

# Output

Is student instance callable?  True
Hello, I am a student.

 

مطالب مشابه



مونگارد