متد ()isinstance

متد ()isinstance در پایتون به شما اجازه می دهد که تست کنید که آیا یک شی یک نمونه از یک نوع خاص (کلاس، زیر کلاس) است یا نه. متد ()isinstance به دو پارامتر نیاز دارد و یک مقدار بولی را برمی گرداند. به عنوان مثال، فرض کنید یک کلاس به نام Animel داریم، سپس یک نمونه از آن ایجاد می کنیم :

  1: class Animal:
  2:     pass
  3: 
  4: myAnimal =  Animal();
  5: 
  6: if isinstance(myAnimal, Animal):
  7:     print("myAnimal is an Animal!");
myAnimal is an Animal

رفتار متد ()isinstance را در این مثال مشاهده کردید. همانطور که می بینید از آن به عنوان شرط در عبارت if استفاده شده است. کاربرد آن در مثال بالا این است که چک می کند که آیا شی myAnimal یک نمونه از Animal است و چون نتیجه درست است کدهای داخل دستور if اجرا می شود. این متد همچنین می تواند چک کند که آیا یک شی خاص در سلسله مراتب وراثت یک نوع خاص است. به این مثال توجه کنید :

class Animal:
    pass

class Dog(Animal):
    pass

myDog =  Dog();

if isinstance(myDog, Animal):
    print("myDog is an Animal!");
myDog is an Animal!

همانطور که در مثال بالا می بینید ما یک کلاس به نام Dog ایجاد کرده ایم که از کلاس Animal ارث می برد. سپس یک نمونه از این کلاس (Dog) ایجاد می کنیم و سپس با استفاده از متد ()isinstance تست می کنیم که آیا نمونه ایجاد شده جز کلاس Animal است یا یک کلاس مشتق شده از کلاس Animal می باشد. از آنجاییکه کلاس Dog از کلاس Animal ارث می برد (سگ من یک حیوان است.)، نتیجه عبارت درست (true) است. حال جمله بالا را تغییر دهیم : ” حیوان من یک سگ است” . وقتی جمله برعکس می شود چه اتفاقی می افتد؟

myAnimal =  Animal();

if isinstance(myAnimal , Dog):
    print("myAnimal is a Dog!");

این باعث خطا نمی شود و عبارت فقط نتیجه false را بر می گرداند. می توان از کد بالا این را درک کرد که همه حیوانات سگ نیستند ولی همه سگها حیوان هستند. راه دیگر برای چک کردن نوع یک شیء استفاده از متد ()type و کلمه کلیدی is است:

class Animal:
    pass

class Dog(Animal):
    pass

myAnimal =  Animal();

if type(myAnimal) is Animal:
    print("myAnimal is an Animal!");
myAnimal is an Animal!