الدالة type()
في بايثون
تعيد الدّالة type()
نوع الكائن المُعطى إن مُرّر مُعامل واحد لها. وتعيد كائن نوعٍ (type object) جديد إن مُرّرت لها ثلاثة مُعاملات.
البنية العامة
type(object)
type(name, bases, dict)
المعاملات
تقبل الدّالة type()
إمّا مُعاملًا واحدًا فقط، أو ثلاثة مُعاملات كما هو واضح في البنية العامّة أعلاه.
- عند استدعائها بمُعامل واحد فقط، ستُعيد الدّالة نوع الكائن المُمرّر.
- أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة
class
.
object
عند استدعائها بمُعامل واحد فقط، يُمثّل هذا المُعامل الكائنَ المرغوبُ الحصول على نوعه.
name
اسم الصّنف المرغوب إنشاؤه. وقيمة الخاصيّة __name__
تُصبح قيمة هذا المُعامل.
bases
صفّ يُمثّل الأصناف الآباء التي سيرث منها الصّنف الجديد، وقيمة الخاصيّة __bases__
تُصبح قيمةَ هذا المُعامل.
dict
قاموس يحتوي على تعريفات لجسم الصّنف (كالمُتغيّرات والتّوابع) الذي يُنسخ إلى القاموس القياسيّ ليُصبح الخاصيّة __dict__
.
القيمة المعادة
إن استُدعيَت الدّالة بمُعاملٍ واحد object
، فستُعيد نوع الكائن المُعطى. والقيمة المُعادة تكون عمومًا نفس الكائن الذي تُعيده الخاصيّة object.__class__
.
أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ (type object) جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة class
.
أمثلة
المثال التّالي يوضّح كيفيّة عمل هذه الدّالة عند استدعائها بمُعامل واحد:
>>> type(1) # عدد صحيح
<class 'int'>
>>> type(1.0) # عدد عشريّ
<class 'float'>
>>> type('') # سلسلة نصيّة
<class 'str'>
>>> type(True) # قيمة منطقيّة
<class 'bool'>
المثال التّالي يُوضّح كيف يُمكن استعمال الدّالة type()
لإنشاء صنفٍ ديناميكيًّا. هنا يكون الصّنف الذي تُنشؤه الدّالة type()
مُطابقًا لذلك المُنشأ من طرف الجملة class
.
>>> class X:
... a = 1
...
>>> X = type('X', (object,), dict(a=1))
المُعامل الثّاني للدّالة type()
في المثال أعلاه هو الكائن object
الذي تَرثُ منه جميع الأصناف تلقائيًّا في بايثون.
يُمكن للمُعامل الثّالث للدّالة type()
أن يقبل كذلك دوالًّا لتكون توابع للصّنف المُنشئ ديناميكيًّا كما هو مُوضّح في المثال التّالي:
>>> def add(x, y): # دالّة عاديّة
... return x+y
...
>>> Calc = type('Calc', (object,), dict(add=add)) # تمرير الدّالة إلى قاموس التّعريفات بنفس الاسم
>>> Calc.add(1, 2) # يُمكننا الآن الوصول إلى التّابع مُباشرةً على الصّنف
3
ملاحظات
- للتّحقّق من نوع كائن مُعيّن، يُنصح باستخدام الدالة isinstance() التي تأخذ الأصناف الفرعيّة بعين الاعتبار عوضًا عن استعمال الدّالة
type()
.
انظر أيضًا
- كائنات الأنواع.
- الدالة object() في بايثون.
- تعريف الأصناف في بايثون.
- الدالة isinstance() في بايثون.