الفرق بين المراجعتين لصفحة: «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>. | ||
أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ | أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة <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"> | ||
سطر 67: | سطر 66: | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/type-objects|كائنات الأنواع]]. | * [[Python/type-objects|كائنات الأنواع]]. | ||
* [[Python/ | * [[Python/class_definition|تعريف الأصناف في بايثون]]. | ||
* [[Python/ | * الدالة <code>[[Python/object|object()]]</code>: تعيد كائنًا <code>object</code> خامًا عديمَ المزايا، وهو الكائن الذي يُعدّ أساس جميع الأصناف. ويحتوي على التّوابع الشّائعة ضمن جميع نُسخ أصناف بايثون. | ||
* [[Python/isinstance| | * الدالة <code>[[Python/isinstance|isinstance()]]</code>: تعيد قيمة منطقيّةً تُشير إلى ما إذا كان الكائن المُعطى نسخة (instance) من الصّنف المُعطى أم لا. | ||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 08:00، 11 يونيو 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()
.
انظر أيضًا
- كائنات الأنواع.
- تعريف الأصناف في بايثون.
- الدالة
object()
: تعيد كائنًاobject
خامًا عديمَ المزايا، وهو الكائن الذي يُعدّ أساس جميع الأصناف. ويحتوي على التّوابع الشّائعة ضمن جميع نُسخ أصناف بايثون. - الدالة
isinstance()
: تعيد قيمة منطقيّةً تُشير إلى ما إذا كان الكائن المُعطى نسخة (instance) من الصّنف المُعطى أم لا.