نستخدم وظيفة type() في لغة Python لتحديد نوع كائن Python محدد. إنها وظيفة بسيطة جدًا وسهلة الفهم. بدون مزيد من المقدمات ، دعنا ننتقل مباشرة إلى الصيغة.
صيغة وظيفة type() في لغة Python
تحتوي Python على العديد من الوظائف المدمجة. تُستخدم وظيفة type()
للحصول على نوع الكائن.
صيغة وظيفة type() في لغة Python هي:
type(object)
type(name, bases, dict)
عند تمرير وسيطة واحدة إلى وظيفة type() ، فإنها تعيد نوع الكائن. قيمتها هي نفس متغير الفصيلة object.__class__.
عند تمرير ثلاثة وسائط ، فإنها تعيد كائن نوع جديد. يتم استخدامها لإنشاء فئة بشكل ديناميكي على الطاير.
- سلسلة “اسم” تصبح اسم الفئة. إنها نفس السمة __name__ للفئة.
- التوابع “bases” تحدد الفئات الأساسية. إنها نفس السمة __bases__ للفئة.
- القاموس “dict” يساعد في إنشاء هيكل الفئة. إنها نفس السمة __dict__ للفئة.
أمثلة على دالة type() في Python
لنلق نظرة على بعض الأمثلة على استخدام دالة type().
1. العثور على نوع كائن Python
x = 10
print(type(x))
s = 'abc'
print(type(s))
from collections import OrderedDict
od = OrderedDict()
print(type(od))
class Data:
pass
d = Data()
print(type(d))
الناتج:
<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>
لاحظ أن دالة type() تعيد نوع الكائن مع اسم الوحدة. نظرًا لأن البرنامج النصي الخاص بنا في Python ليس لديه وحدة، فإن وحدته تصبح __main__.
2. استخراج التفاصيل من فئات Python
لنفترض أن لدينا الفئات التالية. سنقوم بجلب البيانات الوصفية حول الفئات باستخدام الخصائص class و bases و dict و doc.
class Data:
"""Data Class"""
d_id = 10
class SubData(Data):
"""SubData Class"""
sd_id = 20
لنطبع بعض الخصائص لهذه الفئات.
print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)
print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)
الناتج:
<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class
<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class
يمكننا إنشاء فئات مماثلة باستخدام دالة type().
Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)
print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)
الناتج:
<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class
<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class
لاحظ أنه لا يمكننا إنشاء وظائف في الفئة الديناميكية باستخدام دالة type().
استخدام الوظيفة type() في الحياة الواقعية
البايثون هي لغة متغيرة النوع. لذلك، إذا أردنا معرفة نوع الوسائط، يمكننا استخدام وظيفة type(). إذا كنت ترغب في التأكد من عمل الوظيفة الخاصة بك فقط على أنواع معينة من الكائنات، استخدم وظيفة isinstance().
لنفترض أننا نريد إنشاء وظيفة لحساب شيء ما على عددين صحيحين. يمكننا تنفيذها بالطريقة التالية.
def calculate(x, y, op='sum'):
if not(isinstance(x, int) and isinstance(y, int)):
print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
raise TypeError('Incompatible types of arguments, must be integers')
if op == 'difference':
return x - y
if op == 'multiply':
return x * y
# الافتراضي هو جمع
return x + y
تُستخدم وظيفة isinstance() للتحقق من نوع الوسيطة المدخلة. وتُستخدم وظيفة type() لطباعة نوع المعلمات عند فشل التحقق.
المراجع
Source:
https://www.digitalocean.com/community/tutorials/python-type