Python/types

من موسوعة حسوب
< Python
مراجعة 19:24، 20 أغسطس 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة إلى أنّها تعرّف أسماءً لبعض أنواع الكائنات التي يستخدمها مفسّر بايثون المعياري، ولكنّها ليست كائنات داخلية مثل int أو str، إلى جانب أنّ هذه الوحدة تقدم بعض الأصناف والدوال المساعدة الخاصة ببعض الأنواع، والتي لا تعدّ أساسية بما يكفي لتصبح أصنافًا ودوالّ داخلية.

إنشاء الأنواع ديناميكيًا

تقدّم هذه الوحدة ثلاث دوالّ تساعد في إنشاء أنواع البيانات ديناميكيًا:

الأنواع الخاصة بالمفسّر المعياري لبايثون

تقدّم هذه الوحدة أسماء للكثير من الأنواع التي تكون مطلوبة لاستخدام مفسّر بايثون. يتجنّب مفسّر بايثون تضمين بعض الأنواع التي تظهر فقط أثناء عمليات المعالجة مثل النوع listiterator.

تستخدم هذه الأسماء عادة من قبل دوال التحقّق isinstance()‎ و issubclass()‎.

تعرّف الأسماء المعيارية للأنواع التالية:

types.FunctionType types.LambdaType النوع الخاص بالدوال المعرّفة من قبل المستخدمة والدوال التي تنشأ من تعابير lambda.

types.GeneratorType النوع الخاص بكائنات المولدات-المكرّرات، والتي تنشأ من دوال المولّدات.

types.CoroutineType النوع الخاص بكائنات corotuine، والتي تنشأ من دوال async def. ملاحظة: جديد في الإصدار 3.5.

types.AsyncGeneratorType النوع الخاص بكائنات المولدات-المكرّرات غير المتزامنة، والتي تنشأ من دوال المولّدات غير المتزامنة. ملاحظة: جديد في الإصدار 3.6.

types.CodeType النوع الخاص بكائنات code كتلك التي تعيدها الدالة compile()‎.

types.MethodType النوع الخاص بالتوابع الخاصّة بنسخ الأصناف المعرّفة من قبل المستخدم.

types.BuiltinFunctionType types.BuiltinMethodType

النوع الخاص بالدوال الداخلية مثل len()‎ أو sys.exit()‎، والتوابع الخاصة بالأصناف الداخلية. (المقصود بكلمة "الداخلية" هنا أنّها مكتوبة بلغة C).

types.WrapperDescriptorType النوع الخاص بالتوابع الخاصة ببعض أنواع البيانات الداخلية والأصناف الأساسية مثل object.__init__()‎ أو object.__lt__()‎. ملاحظة: جديد في الإصدار 3.7.

types.MethodWrapperType النوع الخاص بالتوابع المرتبطة bound methods الخاصّة ببعض أنواع البيانات الداخلية والأصناف الأساسية، مثل object().__str__‎. ملاحظة: جديد في الإصدار 3.7.

types.MethodDescriptorType النوع الخاص بالتوابع الخاصّة ببعض أنواع البيانات الداخلية مثل str.join()‎.

ملاحظة: جديد في الإصدار 3.7.

types.ClassMethodDescriptorType النوع الخاص بتوابع الأصناف غير المرتبطة الخاصّة ببعض أنواع البيانات الداخلية مثل asdict.__dict__['fromkeys']‎. ملاحظة: جديد في الإصدار 3.7.


class types.ModuleType(name, doc=None) النوع الخاص بالوحدات. تأخذ هذه الدالة البانية اسم الوحدة التي سيجري إنشائها، وسلسلة التوثيق النصية إن كانت متوفرة.

ملاحظة: استخدم importlib.util.module_from_spec()‎ لإنشاء وحدة جديدة إن كنت ترغب في تعين الخصائص المتعدّدة التي يجري التحكم بها عند استيراد الوحدة.

__doc__ سلسلة التوثيق النصية الخاصّة بالوحدة. القيمة الافتراضية هي None.

__loader__ المحمِّل الذي حمّل الوحدة. القيمة الافتراضية هي None. ملاحظة: في الإصدار 3.4 تأخذ الخاصية القيمة الافتراضية None. أما في السابق فقد كانت الخاصّية اختيارية.

__name__ اسم الوحدة.

__package__ الحزمة التي تنتمي إليها الوحدة. إن كانت الوحدة من المستوى العالي (أي أنّها لا تنتمي لحزمة معيّنة) فيجب حينئذ تعيين القيمة لهذه الخاصية، وإلا يجب تعيين اسم الحزمة (والذي يمكن أن يكون __name__ إن كانت الوحدة هي الحزمة ذاتها). تأخذ هذه الخاصية القيمة الافتراضية None.

ملاحظة: في الإصدار 3.4 تأخذ الخاصية القيمة الافتراضية None. أما في السابق فقد كانت الخاصّية اختيارية.

class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno) النوع الخاص بكائنات traceback مثل الموجود في sys.exc_info()‎[2]‎.

راجع دليل اللغة للحصول على المزيد من التفاصيل حول الخصائص والعمليات المتوفرة، والاطلاع على كيفية إنشاء كائنات traceback ديناميكيًا.

types.FrameType النوع الخاص بكائنات frame كتلك الموجودة في tb.tb_frame إن كانت tb كائن traceback.

راجع دليل اللغة للحصول على المزيد من التفاصيل حول الخصائص والعمليات المتوفرة.

types.GetSetDescriptorType النوع الخاص بالكائنات المعرّفة في الوحدات الملحقة مع PyGetSetDef، مثل FrameType.f_locales أو array.array.typecode. يستخدم هذا النوع كواصف descriptor لخصائص الكائن، وهو يؤدي وظفية نوع الخاصية ذاتها، ولكن في الأصناف المعرّفة في الوحدات الملحقة.


types.MemberDescriptorType النوع الخاص بالكائنات المعرّفة في الوحدات الملحقة مع PyMemberDef، مثل datetime.timedelta.days. يستخدم هذا النوع كواصف لعناصر بيانات C البسيطة والتي تستخدم دوال تحويل معيارية، وتؤدي وظيفة نوع الخاصية ولكن في الأصناف المعرّفة في الوحدات الملحقة.

ملاحظة في CPython: في طرق الاستخدام الأخرى لبايثون، يمكن لهذا النوع أن يصبح مماثلًا للنوع GetSetDescriptorType.

class types.MappingProxyType(mapping) وسيط proxy للقراءة فقط خاصّ بكائن ربط. يوفّر هذا النوع عرضًا ديناميكيًا على عناصر كائن الربط، وهذا يعني أنّه في حال طرأ أيّ تغير على كائن الربط، فإنّ العرض سيعكس تلك التغيرات. ملاحظة: هذا النوع جديد في الإصدار 3.3 من اللغة.

key in proxy تعيد هذه العملية القيمة True إن امتلك كائن الربط الضمني المفتاح المعطى، وإلا فتعيد العملية القيمة False.

proxy[key] يعيد التعبير العنصر الموجود في كائن الربط الضمني والذي يمتلك المفتاح المعطى، ويطلق التعبير الاستثناء KeyError إن كان المفتاح المعطى غير موجود في كائن الربط الضمني.

iter(proxy) تعيد الدالة كائن تكرار يمرّ على مفاتيح كائن الربط الضمني، وهي اختصار للتعبير iter(proxy.keys())‎.

len(proxy) تعيد الدالة عدد العناصر في كائن الربط الضمني.

copy() تعيد الدالة نسخة سطحية لكائن الربط الضمني.

get(key[, default]) تعيد قيمة المرتبطة بالمفتاح المعطى إن كان موجودًا في كائن الربط الضمني، وإلّا تعيد القيمة الممرّرة في المعامل default. وفي حال عدم تمرير قيمة لهذا المعامل، فإنّه يأخذ القيمة الافتراضية None، بحيث لا يطلق هذا التابع الاستثناء KeyError.

items() يعيد التابع عرضًا جديدًا لعناصر كائن الربط الضمني (على هيئة أزواج (مفتاح، قيمة)).

keys() يعيد التابع عرضًا جديدًا لمفاتيح كائن الربط الضمني.

values() يعيد التابع عرضًا جديدًا لقيم كائن الربط الضمني.