目次
1. المقدمة
لماذا يعتبر التحقق من الأنواع في Python مهمًا؟ Python هي لغة برمجة ديناميكية التعيين للأنواع، حيث يتم تحديد نوع المتغيرات والكائنات أثناء وقت التشغيل. وبفضل مرونة التصميم، ليست هناك حاجة لإعلان النوع بشكل صريح، لكن هذه المرونة قد تؤدي أحيانًا إلى أخطاء غير متوقعة أو مشكلات في الأداء. لذلك، يعد التحقق من الأنواع خطوة مهمة للحفاظ على موثوقية واستقرار برامج Python. في هذا المقال سنشرح أهم طرق التحقق من الأنواع في Python مثلtype()
و isinstance()
بالإضافة إلى أساليب أخرى متقدمة.2. نظرة عامة على أنواع البيانات في Python
تتضمن Python عدة أنواع بيانات مثل الأعداد، السلاسل النصية، القوائم، والقواميس. لكل نوع استخداماته الخاصة، ويساعد التحقق من النوع على تجنب الأخطاء غير المتوقعة.أهم أنواع البيانات
- الأنواع العددية (int, float) تتضمن الأعداد الصحيحة
int
والأعداد العشريةfloat
.
num1 = 10
num2 = 3.14
print(type(num1)) # <class 'int'>
print(type(num2)) # <class 'float'>
- السلاسل النصية (str) تُستخدم لتخزين النصوص، وتُعرّف باستخدام علامات اقتباس مفردة أو مزدوجة.
text = "Hello, World!"
print(type(text)) # <class 'str'>
- القوائم (list) القائمة عبارة عن مجموعة مرتبة يمكنها تخزين عناصر متعددة وتُعرّف باستخدام
[]
.
mylist = [1, 2, 3, 4]
print(type(mylist)) # <class 'list'>
- القواميس (dict) تُستخدم لتخزين البيانات كأزواج مفتاح-قيمة، وتُعرّف باستخدام
{}
.
mydict = {"one": 1, "two": 2}
print(type(mydict)) # <class 'dict'>

3. التحقق باستخدام type()
تُستخدم دالة type()
للحصول على نوع الكائن المحدد. إنها أداة بسيطة وفعالة لمعرفة نوع المتغير.الاستخدام الأساسي لدالة type()
في المثال التالي نتحقق من نوع المتغير:myvar = 1234
print(type(myvar)) # <class 'int'>
يمكن التحقق من الأنواع الأخرى بنفس الطريقة:mystr = "Hello"
print(type(mystr)) # <class 'str'>
مزايا وقيود type()
على الرغم من بساطتها، فإن type()
لا تأخذ الوراثة في الاعتبار، إذ تتحقق فقط من التطابق المباشر:class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(type(dog) == Animal) # False
في هذه الحالة، رغم أن Dog
يرث من Animal
، إلا أن type()
تُرجع False
. لهذا يُفضل استخدام isinstance()
في مثل هذه الحالات.4. التحقق باستخدام isinstance()
تُستخدم دالة isinstance()
للتحقق مما إذا كان الكائن من نوع معين أو من فئاته الفرعية، مما يجعلها أكثر مرونة.الاستخدام الأساسي لـ isinstance()
myvar = 1234
print(isinstance(myvar, int)) # True
التحقق من أنواع متعددة
يمكن تمرير عدة أنواع في شكلtuple
:value = 3.14
print(isinstance(value, (int, float))) # True
التحقق من الوراثة
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Animal)) # True

5. طرق أخرى للتحقق من الأنواع
بالإضافة إلىtype()
و isinstance()
، هناك طرق أخرى مثل:issubclass()
تتحقق مما إذا كانت فئة فرعية من فئة أخرى:class Animal:
pass
class Dog(Animal):
pass
print(issubclass(Dog, Animal)) # True
collections.abc
مفيد للتحقق من الأنواع الخاصة بمجموعات البيانات مثل القوائم:import collections.abc
mylist = [1, 2, 3]
print(isinstance(mylist, collections.abc.Sequence)) # True
typing
يُستخدم لإضافة التلميحات النوعية (Type Hints) التي تساعد في تحسين قابلية القراءة والاكتشاف المبكر للأخطاء:from typing import List
def greet(names: List[str]) -> None:
for name in names:
print(f"Hello, {name}!")
التحقق من نوع NoneType
myvar = None
print(type(myvar)) # <class 'NoneType'>
يُستخدم هذا النوع للتحقق من القيم الفارغة (None) خصوصًا عند التحقق من القيم المرجعة من الدوال.