الدالة type()‎ في بايثون

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

تعيد الدّالة type()‎ نوع الكائن المُعطى إن مُرّر مُعامل واحد لها. وتعيد كائن نوعٍ (type object) جديد إن مُرّرت لها ثلاثة مُعاملات.

البنية العامة

type(object)
type(name, bases, dict)

المعاملات

تقبل الدّالة type()‎ إمّا مُعاملًا واحدًا فقط، أو ثلاثة مُعاملات كما هو واضح في البنية العامّة أعلاه.

  • عند استدعائها بمُعامل واحد فقط، ستُعيد الدّالة نوع الكائن المُمرّر.
  • أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة class.

object

عند استدعائها بمُعامل واحد فقط، يُمثّل هذا المُعامل الكائنَ المرغوبُ الحصول على نوعه.

name

اسم الصّنف المرغوب إنشاؤه. وقيمة الخاصيّة ‎_‎_‎name‎_‎_‎ تُصبح قيمة هذا المُعامل.

bases

صفّ يُمثّل الأصناف الآباء التي سيرث منها الصّنف الجديد، وقيمة الخاصيّة ‎_‎_‎bases‎_‎_‎ تُصبح قيمةَ هذا المُعامل.

dict

قاموس يحتوي على تعريفات لجسم الصّنف (كالمُتغيّرات والتّوابع) الذي يُنسخ إلى القاموس القياسيّ ليُصبح قيمة الخاصيّة ‎_‎_‎dict‎_‎_‎.

القيمة المعادة

إن استُدعيَت الدّالة بمُعاملٍ واحد object، فستُعيد نوع الكائن المُعطى. والقيمة المُعادة تكون عمومًا نفس الكائن الذي تُعيده الخاصيّة ‎object‎.‎_‎_‎class‎_‎_‎.

أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة 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()‎: تعيد كائنًا object‎ خامًا عديمَ المزايا، وهو الكائن الذي يُعدّ أساس جميع الأصناف. ويحتوي على التّوابع الشّائعة ضمن جميع نُسخ أصناف بايثون.
  • الدالة isinstance()‎: تعيد قيمة منطقيّةً تُشير إلى ما إذا كان الكائن المُعطى نسخة (instance) من الصّنف المُعطى أم لا.

مصادر