تُوفر كتابة الأنواع الديناميكية في بايثون مرونة كبيرة، لكنك قد تحتاج أحيانًا إلى تحديد نوع متغير ما وقت التشغيل. تستعرض هذه المقالة طرقًا فعّالة للتحقق من أنواع المتغيرات في بايثون.
محتويات
- أنواع البيانات في بايثون
- طرق التحقق من النوع
- استخدام دالة
type()
- استخدام دالة
isinstance()
- معالجة أخطاء الأنواع
أنواع البيانات في بايثون
إن فهم أنواع البيانات الأساسية في بايثون أمر بالغ الأهمية للتحقق الفعال من الأنواع. تتضمن الأنواع المدمجة الرئيسية:
- الأعداد الصحيحة (
int
): أعداد صحيحة (مثل: 10، -5، 0) - الأعداد العشرية (
float
): أعداد ذات فاصلة عشرية (مثل: 3.14، -2.5، 0.0) - السلاسل النصية (
str
): متواليات من الأحرف (مثل: “Hello”، ‘Python’) - القيم المنطقية (
bool
):True
أوFalse
- القوائم (
list
): متواليات مرتبة قابلة للتغيير (مثل: [1، 2، 3]) - المجموعات (
tuple
): متواليات مرتبة غير قابلة للتغيير (مثل: (1، 2، 3)) - القواميس (
dict
): أزواج مفتاح-قيمة (مثل: {‘name’: ‘Alice’, ‘age’: 30}) - المجموعات (
set
): مجموعات غير مرتبة من العناصر الفريدة (مثل: {1، 2، 3}) - نوع None (
None
): يمثل عدم وجود قيمة
طرق التحقق من النوع
توفر بايثون عدة طرق للتحقق من أنواع المتغيرات. الأكثر شيوعًا هما دالتا type()
و isinstance()
.
استخدام دالة type()
تعيد دالة type()
مباشرةً نوع الكائن.
x = 10
y = 3.14
z = "Hello"
a = True
my_list = [1, 2, 3]
print(type(x)) # الإخراج: <class 'int'>
print(type(y)) # الإخراج: <class 'float'>
print(type(z)) # الإخراج: <class 'str'>
print(type(a)) # الإخراج: <class 'bool'>
print(type(my_list)) # الإخراج: <class 'list'>
استخدام دالة isinstance()
تُوفر isinstance()
مرونة أكبر، خاصةً مع الميراث. فهي تتحقق مما إذا كان الكائن مثيلًا لفئة ما أو لفئة فرعية منها.
x = 10
y = 3.14
z = "Hello"
print(isinstance(x, int)) # الإخراج: True
print(isinstance(y, float)) # الإخراج: True
print(isinstance(z, str)) # الإخراج: True
print(isinstance(x, (int, float))) # الإخراج: True (يتحقق مما إذا كان x عددًا صحيحًا أو عددًا عشريًا)
تُعد isinstance()
مفيدة للتحقق من أنواع متعددة أو عند العمل مع فئات مخصصة.
معالجة أخطاء الأنواع
يمكن أن تؤدي أنواع المتغيرات غير المتوقعة إلى أخطاء. تتضمن الكود القوي معالجة الأخطاء:
def process_data(data):
try:
if isinstance(data, int):
# معالجة بيانات عدد صحيح
result = data * 2
elif isinstance(data, str):
# معالجة بيانات سلسلة نصية
result = data.upper()
else:
raise TypeError("نوع بيانات غير مدعوم")
return result
except TypeError as e:
print(f"خطأ: {e}")
return None
print(process_data(10)) # الإخراج: 20
print(process_data("hello")) # الإخراج: HELLO
print(process_data([1,2,3])) # الإخراج: خطأ: نوع بيانات غير مدعوم
# None