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

من موسوعة حسوب
< Python
مراجعة 15:45، 21 مايو 2018 بواسطة عبد-الهادي-الديوري (نقاش | مساهمات) (إضافة الصّفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

تعيد الدّالة 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()‎.

انظر أيضًا

مصادر