الفرق بين المراجعتين ل"Python/type"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إضافة الصّفحة)
 
سطر 16: سطر 16:
 
=== <code>object</code> ===
 
=== <code>object</code> ===
 
عند استدعائها بمُعامل واحد فقط، يُمثّل هذا المُعامل الكائنَ المرغوبُ الحصول على نوعه.
 
عند استدعائها بمُعامل واحد فقط، يُمثّل هذا المُعامل الكائنَ المرغوبُ الحصول على نوعه.
 
 
 
=== <code>name</code> ===
 
=== <code>name</code> ===
 
اسم الصّنف المرغوب إنشاؤه. وقيمة الخاصيّة  <code>‎_‎_‎name‎_‎_‎</code> تُصبح قيمة هذا المُعامل.
 
اسم الصّنف المرغوب إنشاؤه. وقيمة الخاصيّة  <code>‎_‎_‎name‎_‎_‎</code> تُصبح قيمة هذا المُعامل.
سطر 25: سطر 23:
  
 
=== <code>dict</code> ===
 
=== <code>dict</code> ===
قاموس يحتوي على تعريفات لجسم الصّنف (كالمُتغيّرات والتّوابع) الذي يُنسخ إلى القاموس القياسيّ ليُصبح الخاصيّة  <code>‎_‎_‎dict‎_‎_‎</code>.
+
قاموس يحتوي على تعريفات لجسم الصّنف (كالمُتغيّرات والتّوابع) الذي يُنسخ إلى القاموس القياسيّ ليُصبح قيمة الخاصيّة  <code>‎_‎_‎dict‎_‎_‎</code>.
  
 
== القيمة المعادة ==
 
== القيمة المعادة ==
 
إن استُدعيَت الدّالة بمُعاملٍ واحد <code>object</code>، فستُعيد نوع الكائن المُعطى. والقيمة المُعادة تكون عمومًا نفس الكائن الذي تُعيده الخاصيّة <code>‎object‎.‎_‎_‎class‎_‎_‎</code>.
 
إن استُدعيَت الدّالة بمُعاملٍ واحد <code>object</code>، فستُعيد نوع الكائن المُعطى. والقيمة المُعادة تكون عمومًا نفس الكائن الذي تُعيده الخاصيّة <code>‎object‎.‎_‎_‎class‎_‎_‎</code>.
  
أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ (type object) جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة  <code>class</code>.
+
أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة  <code>class</code>.
  
 
== أمثلة ==
 
== أمثلة ==
سطر 44: سطر 42:
 
<class 'bool'>
 
<class 'bool'>
 
</syntaxhighlight>
 
</syntaxhighlight>
المثال التّالي يُوضّح كيف يُمكن استعمال الدّالة <code>type()‎</code> لإنشاء صنفٍ ديناميكيًّا. هنا يكون الصّنف الذي تُنشؤه الدّالة <code>type()‎</code> مُطابقًا لذلك المُنشأ من طرف الجملة <code>class‎</code>.
+
المثال التّالي يُوضّح كيف يُمكن استعمال الدّالة <code>type()‎</code> لإنشاء صنفٍ ديناميكيًّا. هنا يكون الصّنف الذي تُنشؤه الدّالة <code>type()‎</code> مُطابقًا لذلك المُنشأ من طرف الجملة <code>class‎</code> كما يلي:
 
<syntaxhighlight lang="python3">
 
<syntaxhighlight lang="python3">
 
>>> class X:
 
>>> class X:
سطر 51: سطر 49:
 
>>> X = type('X', (object,), dict(a=1))
 
>>> X = type('X', (object,), dict(a=1))
 
</syntaxhighlight>
 
</syntaxhighlight>
المُعامل الثّاني للدّالة <code>type()‎</code> في المثال أعلاه هو الكائن <code>object‎</code> الذي تَرثُ منه جميع الأصناف تلقائيًّا في بايثون.
+
المُعامل الثّاني للدّالة <code>type()‎</code> في المثال أعلاه هو الكائن <code>[[Python/object|object‎]]</code> الذي تَرثُ منه جميع الأصناف تلقائيًّا في بايثون.
 +
 
 
يُمكن للمُعامل الثّالث للدّالة <code>type()‎</code> أن يقبل كذلك دوالًّا لتكون توابع للصّنف المُنشئ ديناميكيًّا كما هو مُوضّح في المثال التّالي:
 
يُمكن للمُعامل الثّالث للدّالة <code>type()‎</code> أن يقبل كذلك دوالًّا لتكون توابع للصّنف المُنشئ ديناميكيًّا كما هو مُوضّح في المثال التّالي:
 
<syntaxhighlight lang="python3">
 
<syntaxhighlight lang="python3">

مراجعة 15:57، 21 مايو 2018

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

انظر أيضًا

مصادر