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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة...')
 
 
(3 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 1: سطر 1:
تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة إلى أنّها تعرّف أسماءً لبعض أنواع الكائنات التي يستخدمها مفسّر بايثون المعياري، ولكنّها ليست كائنات داخلية مثل int أو str، إلى جانب أنّ هذه الوحدة تقدم بعض الأصناف والدوال المساعدة الخاصة ببعض الأنواع، والتي لا تعدّ أساسية بما يكفي لتصبح أصنافًا ودوالّ داخلية.
+
تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة إلى أنّها تعرّف أسماءً لبعض أنواع الكائنات التي يستخدمها مفسّر بايثون المعياري، ولكنّها ليست كائنات داخلية مثل <code>[[Python/int|int]]</code> أو <code>[[Python/str|str]]</code>، إلى جانب أنّ هذه الوحدة تقدم بعض الأصناف والدوال المساعدة الخاصة ببعض الأنواع، والتي لا تعدّ أساسية بما يكفي لتصبح أصنافًا ودوالّ داخلية.
  
 
== إنشاء الأنواع ديناميكيًا ==
 
== إنشاء الأنواع ديناميكيًا ==
سطر 5: سطر 5:
 
تقدّم هذه الوحدة ثلاث دوالّ تساعد في إنشاء أنواع البيانات ديناميكيًا:
 
تقدّم هذه الوحدة ثلاث دوالّ تساعد في إنشاء أنواع البيانات ديناميكيًا:
  
الأنواع الخاصة بالمفسّر المعياري لبايثون
+
=== الدالة <code>[[Python/types/new class|types.new_class()]]‎‎</code> ===
 +
تنشئ هذه الدالة ديناميكيًا كائن صنف باستخدام صنف ميتا (metaclass) المناسب.
  
تقدّم هذه الوحدة أسماء للكثير من الأنواع التي تكون مطلوبة لاستخدام مفسّر بايثون. يتجنّب مفسّر بايثون تضمين بعض الأنواع التي تظهر فقط أثناء عمليات المعالجة مثل النوع listiterator.
+
=== الدالة <code>[[Python/types/prepare class|types.prepare_class()]]‎‎</code> ===
 +
تحسب هذه الدالة صنف ميتا المناسب وتنشئ نطاق الأسماء.
  
تستخدم هذه الأسماء عادة من قبل دوال التحقّق isinstance()‎ و issubclass()‎.
+
=== الدالة <code>[[Python/types/reslove bases|types.reslove_bases()]]‎‎</code> ===
 +
تحلّل الدالة مدخلات (ترتيب تحليل التوابع MRO) بصورة ديناميكية وكما هو محدّد في [https://www.python.org/dev/peps/pep-0560 '''PEP 560'''].
 +
 
 +
== الأنواع الخاصة بالمفسّر المعياري لبايثون ==
 +
تقدّم هذه الوحدة أسماء للكثير من الأنواع التي تكون مطلوبة لاستخدام مفسّر بايثون. يتجنّب مفسّر بايثون تضمين بعض الأنواع التي تظهر فقط أثناء عمليات المعالجة مثل النوع <code>listiterator</code>.
 +
 
 +
تستخدم هذه الأسماء عادة من قبل دوال التحقّق [[Python/isinstance|<code>isinstance()</code>]] و <code>[[Python/issubclass|issubclass()‎]]</code>.
  
 
تعرّف الأسماء المعيارية للأنواع التالية:
 
تعرّف الأسماء المعيارية للأنواع التالية:
  
types.FunctionType
+
=== النوع <code>types.FunctionType</code> ===
types.LambdaType
+
 
النوع الخاص بالدوال المعرّفة من قبل المستخدمة والدوال التي تنشأ من تعابير lambda.
+
=== النوع <code>types.LambdaType</code> ===
 +
النوع الخاص بالدوال المعرّفة من قبل المستخدمة والدوال التي تنشأ من [[Python/lambda expressions|تعابير <code>lambda</code>]].
  
types.GeneratorType
+
=== النوع <code>types.GeneratorType</code> ===
 
النوع الخاص بكائنات المولدات-المكرّرات، والتي تنشأ من دوال المولّدات.
 
النوع الخاص بكائنات المولدات-المكرّرات، والتي تنشأ من دوال المولّدات.
  
types.CoroutineType
+
=== النوع <code>types.CoroutineType</code> ===
النوع الخاص بكائنات corotuine، والتي تنشأ من دوال async def.
+
النوع الخاص بكائنات <code>corotuine</code>، والتي تنشأ من دوال <code>async def</code>.
 +
 
 
ملاحظة: جديد في الإصدار 3.5.
 
ملاحظة: جديد في الإصدار 3.5.
  
types.AsyncGeneratorType
+
=== النوع <code>types.AsyncGeneratorType</code> ===
 
النوع الخاص بكائنات المولدات-المكرّرات غير المتزامنة، والتي تنشأ من دوال المولّدات غير المتزامنة.
 
النوع الخاص بكائنات المولدات-المكرّرات غير المتزامنة، والتي تنشأ من دوال المولّدات غير المتزامنة.
 
ملاحظة: جديد في الإصدار 3.6.
 
ملاحظة: جديد في الإصدار 3.6.
  
types.CodeType
+
=== النوع <code>types.CodeType</code> ===
النوع الخاص بكائنات code كتلك التي تعيدها الدالة compile()‎.
+
النوع الخاص بكائنات <code>code</code> كتلك التي تعيدها الدالة <code>[[Python/compile|compile()]]</code>‎.
  
types.MethodType
+
=== النوع <code>types.MethodType</code> ===
 
النوع الخاص بالتوابع الخاصّة بنسخ الأصناف المعرّفة من قبل المستخدم.
 
النوع الخاص بالتوابع الخاصّة بنسخ الأصناف المعرّفة من قبل المستخدم.
  
types.BuiltinFunctionType
+
=== النوع <code>types.BuiltinFunctionType</code> ===
types.BuiltinMethodType
 
  
النوع الخاص بالدوال الداخلية مثل len()‎ أو sys.exit()‎، والتوابع الخاصة بالأصناف الداخلية. (المقصود بكلمة "الداخلية" هنا أنّها مكتوبة بلغة C).
+
=== النوع <code>types.BuiltinMethodType</code> ===
 +
النوع الخاص بالدوال الداخلية مثل <code>[[Python/len|len()‎]]</code> أو <code>[[Python/sys/exit|sys.exit()]]</code>‎، والتوابع الخاصة بالأصناف الداخلية. (المقصود بكلمة "الداخلية" هنا أنّها مكتوبة بلغة C).
 +
 
 +
=== النوع <code>types.WrapperDescriptorType</code> ===
 +
النوع الخاص بالتوابع الخاصة ببعض أنواع البيانات الداخلية والأصناف الأساسية مثل <code>object.__init__()‎</code> أو <code>object.__lt__()‎</code>.
  
types.WrapperDescriptorType
 
النوع الخاص بالتوابع الخاصة ببعض أنواع البيانات الداخلية والأصناف الأساسية مثل object.__init__()‎ أو object.__lt__()‎.
 
 
ملاحظة: جديد في الإصدار 3.7.
 
ملاحظة: جديد في الإصدار 3.7.
  
types.MethodWrapperType
+
=== النوع <code>types.MethodWrapperType</code> ===
النوع الخاص بالتوابع المرتبطة bound methods الخاصّة ببعض أنواع البيانات الداخلية والأصناف الأساسية، مثل object().__str__‎.
+
النوع الخاص بالتوابع المرتبطة bound methods الخاصّة ببعض أنواع البيانات الداخلية والأصناف الأساسية، مثل <code>object().__str__‎</code>.
 +
 
 
ملاحظة: جديد في الإصدار 3.7.
 
ملاحظة: جديد في الإصدار 3.7.
  
types.MethodDescriptorType
+
=== النوع <code>types.MethodDescriptorType</code> ===
النوع الخاص بالتوابع الخاصّة ببعض أنواع البيانات الداخلية مثل str.join()‎.
+
النوع الخاص بالتوابع الخاصّة ببعض أنواع البيانات الداخلية مثل <code>[[Python/str/join|str.join()‎]]</code>.
  
 
ملاحظة: جديد في الإصدار 3.7.
 
ملاحظة: جديد في الإصدار 3.7.
  
types.ClassMethodDescriptorType
+
=== النوع <code>types.ClassMethodDescriptorType</code> ===
النوع الخاص بتوابع الأصناف غير المرتبطة الخاصّة ببعض أنواع البيانات الداخلية مثل asdict.__dict__['fromkeys']‎.
+
النوع الخاص بتوابع الأصناف غير المرتبطة الخاصّة ببعض أنواع البيانات الداخلية مثل <code>asdict.__dict__['fromkeys']‎</code>.
 +
 
 
ملاحظة: جديد في الإصدار 3.7.
 
ملاحظة: جديد في الإصدار 3.7.
  
 +
=== الصنف <code>types.ModuleType(name, doc=None)‎</code> ===
 +
النوع الخاص بالوحدات. تأخذ هذه الدالة البانية اسم الوحدة التي سيجري إنشائها، وسلسلة التوثيق النصية إن كانت متوفرة.
  
class types.ModuleType(name, doc=None)
+
ملاحظة: استخدم <code>importlib.util.module_from_spec()</code>‎ لإنشاء وحدة جديدة إن كنت ترغب في تعين الخصائص المتعدّدة التي يجري التحكم بها عند استيراد الوحدة.
النوع الخاص بالوحدات. تأخذ هذه الدالة البانية اسم الوحدة التي سيجري إنشائها، وسلسلة التوثيق النصية إن كانت متوفرة.
 
  
ملاحظة:
+
==== <code>__doc__</code> ====
استخدم importlib.util.module_from_spec()‎ لإنشاء وحدة جديدة إن كنت ترغب في تعين الخصائص المتعدّدة التي يجري التحكم بها عند استيراد الوحدة.
+
سلسلة التوثيق النصية الخاصّة بالوحدة. القيمة الافتراضية هي <code>None</code>.
  
__doc__
+
==== <code>__loader__</code> ====
سلسلة التوثيق النصية الخاصّة بالوحدة. القيمة الافتراضية هي None.
+
المحمِّل الذي حمّل الوحدة. القيمة الافتراضية هي <code>None</code>.
  
__loader__
+
ملاحظة: في الإصدار 3.4 تأخذ الخاصية القيمة الافتراضية <code>None</code>. أما في السابق فقد كانت الخاصّية اختيارية.
المحمِّل الذي حمّل الوحدة. القيمة الافتراضية هي None.
 
ملاحظة: في الإصدار 3.4 تأخذ الخاصية القيمة الافتراضية None. أما في السابق فقد كانت الخاصّية اختيارية.
 
  
__name__
+
==== <code>__name__</code> ====
 
اسم الوحدة.
 
اسم الوحدة.
  
__package__
+
==== <code>__package__</code> ====
الحزمة التي تنتمي إليها الوحدة. إن كانت الوحدة من المستوى العالي (أي أنّها لا تنتمي لحزمة معيّنة) فيجب حينئذ تعيين القيمة '' لهذه الخاصية، وإلا يجب تعيين اسم الحزمة (والذي يمكن أن يكون __name__ إن كانت الوحدة هي الحزمة ذاتها). تأخذ هذه الخاصية القيمة الافتراضية None.
+
الحزمة التي تنتمي إليها الوحدة. إن كانت الوحدة من المستوى العالي (أي أنّها لا تنتمي لحزمة معيّنة) فيجب حينئذ تعيين القيمة لهذه الخاصية، وإلا يجب تعيين اسم الحزمة (والذي يمكن أن يكون <code>__name__</code> إن كانت الوحدة هي الحزمة ذاتها). تأخذ هذه الخاصية القيمة الافتراضية <code>None</code>.
  
ملاحظة: في الإصدار 3.4 تأخذ الخاصية القيمة الافتراضية None. أما في السابق فقد كانت الخاصّية اختيارية.
+
ملاحظة: في الإصدار 3.4 تأخذ الخاصية القيمة الافتراضية <code>None</code>. أما في السابق فقد كانت الخاصّية اختيارية.
  
class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
+
=== الصنف ‎<code>types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)‎</code> ===
النوع الخاص بكائنات traceback مثل الموجود في sys.exc_info()‎[2]‎.
+
النوع الخاص بكائنات <code>traceback</code> مثل الموجود في <code>sys.exc_info()‎[2]‎</code>.
  
راجع دليل اللغة للحصول على المزيد من التفاصيل حول الخصائص والعمليات المتوفرة، والاطلاع على كيفية إنشاء كائنات traceback ديناميكيًا.
+
راجع دليل اللغة للحصول على المزيد من التفاصيل حول الخصائص والعمليات المتوفرة، والاطلاع على كيفية إنشاء كائنات <code>traceback</code> ديناميكيًا.
  
types.FrameType
+
=== النوع <code>types.FrameType</code> ===
النوع الخاص بكائنات frame كتلك الموجودة في tb.tb_frame إن كانت tb كائن traceback.
+
النوع الخاص بكائنات <code>frame</code> كتلك الموجودة في <code>tb.tb_frame</code> إن كانت <code>tb</code> كائن <code>traceback</code>.
  
 
راجع دليل اللغة للحصول على المزيد من التفاصيل حول الخصائص والعمليات المتوفرة.
 
راجع دليل اللغة للحصول على المزيد من التفاصيل حول الخصائص والعمليات المتوفرة.
  
types.GetSetDescriptorType
+
=== النوع <code>types.GetSetDescriptorType</code> ===
النوع الخاص بالكائنات المعرّفة في الوحدات الملحقة مع PyGetSetDef، مثل FrameType.f_locales أو array.array.typecode. يستخدم هذا النوع كواصف descriptor لخصائص الكائن، وهو يؤدي وظفية نوع الخاصية ذاتها، ولكن في الأصناف المعرّفة في الوحدات الملحقة.
+
النوع الخاص بالكائنات المعرّفة في الوحدات الملحقة مع <code>PyGetSetDef</code>، مثل <code>FrameType.f_locales</code> أو <code>array.array.typecode</code>. يستخدم هذا النوع كواصف descriptor لخصائص الكائن، وهو يؤدي وظفية نوع الخاصية ذاتها، ولكن في الأصناف المعرّفة في الوحدات الملحقة.
  
 +
=== النوع <code>types.MemberDescriptorType</code> ===
 +
النوع الخاص بالكائنات المعرّفة في الوحدات الملحقة مع PyMemberDef، مثل <code>[[Python/datetime/timedelta#.D8.AE.D8.B5.D8.A7.D8.A6.D8.B5 .D9.86.D8.B3.D8.AE.D8.A9 .D8.A7.D9.84.D8.B5.D9.86.D9.81 timedelta|datetime.timedelta.days]]</code>. يستخدم هذا النوع كواصف لعناصر بيانات C البسيطة والتي تستخدم دوال تحويل معيارية، وتؤدي وظيفة نوع الخاصية ولكن في الأصناف المعرّفة في الوحدات الملحقة.
  
types.MemberDescriptorType
+
'''ملاحظة في CPython''': في طرق الاستخدام الأخرى لبايثون، يمكن لهذا النوع أن يصبح مماثلًا للنوع <code>GetSetDescriptorType</code>.
النوع الخاص بالكائنات المعرّفة في الوحدات الملحقة مع PyMemberDef، مثل datetime.timedelta.days. يستخدم هذا النوع كواصف لعناصر بيانات C البسيطة والتي تستخدم دوال تحويل معيارية، وتؤدي وظيفة نوع الخاصية ولكن في الأصناف المعرّفة في الوحدات الملحقة.
 
  
ملاحظة في CPython: في طرق الاستخدام الأخرى لبايثون، يمكن لهذا النوع أن يصبح مماثلًا للنوع GetSetDescriptorType.
+
=== الصنف <code>types.MappingProxyType(mapping)‎</code> ===
 +
وسيط proxy للقراءة فقط خاصّ بكائن ربط. يوفّر هذا النوع عرضًا ديناميكيًا على عناصر كائن الربط، وهذا يعني أنّه في حال طرأ أيّ تغير على كائن الربط، فإنّ العرض سيعكس تلك التغيرات.
  
class types.MappingProxyType(mapping)
 
وسيط proxy للقراءة فقط خاصّ بكائن ربط. يوفّر هذا النوع عرضًا ديناميكيًا على عناصر كائن الربط، وهذا يعني أنّه في حال طرأ أيّ تغير على كائن الربط، فإنّ العرض سيعكس تلك التغيرات.
 
 
ملاحظة: هذا النوع جديد في الإصدار 3.3 من اللغة.
 
ملاحظة: هذا النوع جديد في الإصدار 3.3 من اللغة.
  
key in proxy
+
=== <code>key in proxy</code> ===
تعيد هذه العملية القيمة True إن امتلك كائن الربط الضمني المفتاح المعطى، وإلا فتعيد العملية القيمة False.
+
تعيد هذه العملية القيمة <code>True</code> إن امتلك كائن الربط الضمني المفتاح المعطى، وإلا فتعيد العملية القيمة <code>False</code>.
  
proxy[key]
+
=== <code>proxy[key]‎</code> ===
يعيد التعبير العنصر الموجود في كائن الربط الضمني والذي يمتلك المفتاح المعطى، ويطلق التعبير الاستثناء KeyError إن كان المفتاح المعطى غير موجود في كائن الربط الضمني.
+
يعيد التعبير العنصر الموجود في كائن الربط الضمني والذي يمتلك المفتاح المعطى، ويطلق التعبير الاستثناء <code>KeyError</code> إن كان المفتاح المعطى غير موجود في كائن الربط الضمني.
  
iter(proxy)
+
=== <code>iter(proxy)‎</code> ===
تعيد الدالة كائن تكرار يمرّ على مفاتيح كائن الربط الضمني، وهي اختصار للتعبير iter(proxy.keys())‎.
+
تعيد الدالة كائن تكرار يمرّ على مفاتيح كائن الربط الضمني، وهي اختصار للتعبير <code>iter(proxy.keys())‎</code>.
  
len(proxy)
+
=== <code>len(proxy)‎</code> ===
 
تعيد الدالة عدد العناصر في كائن الربط الضمني.
 
تعيد الدالة عدد العناصر في كائن الربط الضمني.
  
copy()
+
=== <code>copy()‎</code> ===
 
تعيد الدالة نسخة سطحية لكائن الربط الضمني.
 
تعيد الدالة نسخة سطحية لكائن الربط الضمني.
  
get(key[, default])
+
=== <code>get(key[, default])‎</code> ===
تعيد قيمة المرتبطة بالمفتاح المعطى إن كان موجودًا في كائن الربط الضمني، وإلّا تعيد القيمة الممرّرة في المعامل default. وفي حال عدم تمرير قيمة لهذا المعامل، فإنّه يأخذ القيمة الافتراضية None، بحيث لا يطلق هذا التابع الاستثناء KeyError.
+
تعيد قيمة المرتبطة بالمفتاح المعطى إن كان موجودًا في كائن الربط الضمني، وإلّا تعيد القيمة الممرّرة في المعامل <code>default</code>. وفي حال عدم تمرير قيمة لهذا المعامل، فإنّه يأخذ القيمة الافتراضية None، بحيث لا يطلق هذا التابع الاستثناء <code>KeyError</code>.
  
items()
+
=== <code>items()‎</code> ===
 
يعيد التابع عرضًا جديدًا لعناصر كائن الربط الضمني (على هيئة أزواج (مفتاح، قيمة)).
 
يعيد التابع عرضًا جديدًا لعناصر كائن الربط الضمني (على هيئة أزواج (مفتاح، قيمة)).
  
keys()
+
=== <code>keys()‎</code> ===
 
يعيد التابع عرضًا جديدًا لمفاتيح كائن الربط الضمني.
 
يعيد التابع عرضًا جديدًا لمفاتيح كائن الربط الضمني.
  
values()
+
=== <code>values()‎</code> ===
 
يعيد التابع عرضًا جديدًا لقيم كائن الربط الضمني.
 
يعيد التابع عرضًا جديدًا لقيم كائن الربط الضمني.
 +
 +
== أصناف ودوال مساعدة إضافية ==
 +
 +
=== الصنف <code>types.SimpleNamespace</code> ===
 +
صنف بسيط متفرّع من الصنف <code>object</code> يوفّر الوصول إلى نطاق الأسماء الخاص به عن طريق الخصائص، إلى جانب تقديم تمثيل يحمل معنى واضحًا.
 +
 +
على عكس الصنف <code>object</code>، يمكان إضافة وحذف الخصائص بواسطة الصنف <code>SimpleNamespace</code>. وإذا هُيّئَ كائن <code>SimpleNamespace</code> مع معاملات مفتاحية، فإنّه هذه المعاملات تضاف مباشرة إلى نطاق الأسماء الضمني.
 +
 +
هذا النوع مشابه تقريبًا للشيفرة التالية:<syntaxhighlight lang="python3">
 +
class SimpleNamespace:
 +
    def __init__(self, **kwargs):
 +
        self.__dict__.update(kwargs)
 +
 +
    def __repr__(self):
 +
        keys = sorted(self.__dict__)
 +
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
 +
        return "{}({})".format(type(self).__name__, ", ".join(items))
 +
 +
    def __eq__(self, other):
 +
        return self.__dict__ == other.__dict__
 +
</syntaxhighlight>يمكن للصنف <code>SimpleNamespace</code> أن يكون بديلًا عن <code>class NS: pass</code>، ولكن إن كنت بحاجة إلى نوع ذي سجلات منظّمة، فعليك باستخدام [[Python/namedtuple|الصفوف المسمّاة <code>namedtuple()</code>‎]].
 +
 +
'''ملاحظة:''' هذا الصنف جديد في الإصدار 3.3 من اللغة.
 +
=== الدالة <code>types.DynamicClassAttribute()‎</code> ===
 +
تربط الدالة وصول الخصائص في صنف معيّن بالتابع <code>__getattr__</code>.
 +
 +
يستخدم هذا الواصف لتعريف الخصائص التي تسلك سلوكًا مغايرًا عند الوصول إليها عن طريق نسخة الصنف وعن طريق الصنف. يبقى الوصول عن طريق نسخة الصنف كما هو، ولكن الوصول إلى الخاصية عن طريق الصنف سيوجَّه إلى تابع الصنف <code>__getattr__</code>، ويتم ذلك عن طريق إطلاق الخطأ <code>AttributeError</code>.
 +
 +
تسمح هذه الطريقة بجعل الخصائص فعالة في نسخة من الصنف، والحصول على خصائص ظاهرية في الصنف تحمل الاسم نفسه (راجع [[Python/enum|Enum]] للاطلاع على مثال بهذا الخصوص).
 +
 +
'''ملاحظة:''' هذه الدالة جديدة في الإصدار 3.4 من بايثون.
 +
== دوال <code>coroutine</code> مساعدة ==
 +
 +
=== الدالة <code>[[Python/types/coroutine|types.coroutine()]]‎</code> ===
 +
تحوّل هذه الدالة دالة مولّدة إلى دالة <code>coroutine</code> تعيد <code>coroutine</code> مستندًا على مولّد. 
 +
 +
== مصادر ==
 +
* [https://docs.python.org/3/library/types.html صفحة Dynamic type creation and names for built-in types في توثيق بايثون الرسمي.]
 +
[[تصنيف:Python]]
 +
[[تصنيف:Python Modules]]

المراجعة الحالية بتاريخ 12:44، 21 أغسطس 2018

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

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

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

الدالة types.new_class()‎‎

تنشئ هذه الدالة ديناميكيًا كائن صنف باستخدام صنف ميتا (metaclass) المناسب.

الدالة types.prepare_class()‎‎

تحسب هذه الدالة صنف ميتا المناسب وتنشئ نطاق الأسماء.

الدالة types.reslove_bases()‎‎

تحلّل الدالة مدخلات (ترتيب تحليل التوابع MRO) بصورة ديناميكية وكما هو محدّد في PEP 560.

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

تقدّم هذه الوحدة أسماء للكثير من الأنواع التي تكون مطلوبة لاستخدام مفسّر بايثون. يتجنّب مفسّر بايثون تضمين بعض الأنواع التي تظهر فقط أثناء عمليات المعالجة مثل النوع 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.

الصنف types.ModuleType(name, doc=None)‎

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

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

__doc__

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

__loader__

المحمِّل الذي حمّل الوحدة. القيمة الافتراضية هي None.

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

__name__

اسم الوحدة.

__package__

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

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

الصنف ‎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.

الصنف 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()‎

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

أصناف ودوال مساعدة إضافية

الصنف types.SimpleNamespace

صنف بسيط متفرّع من الصنف object يوفّر الوصول إلى نطاق الأسماء الخاص به عن طريق الخصائص، إلى جانب تقديم تمثيل يحمل معنى واضحًا.

على عكس الصنف object، يمكان إضافة وحذف الخصائص بواسطة الصنف SimpleNamespace. وإذا هُيّئَ كائن SimpleNamespace مع معاملات مفتاحية، فإنّه هذه المعاملات تضاف مباشرة إلى نطاق الأسماء الضمني.

هذا النوع مشابه تقريبًا للشيفرة التالية:

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

    def __eq__(self, other):
        return self.__dict__ == other.__dict__

يمكن للصنف SimpleNamespace أن يكون بديلًا عن class NS: pass، ولكن إن كنت بحاجة إلى نوع ذي سجلات منظّمة، فعليك باستخدام الصفوف المسمّاة namedtuple().

ملاحظة: هذا الصنف جديد في الإصدار 3.3 من اللغة.

الدالة types.DynamicClassAttribute()‎

تربط الدالة وصول الخصائص في صنف معيّن بالتابع __getattr__.

يستخدم هذا الواصف لتعريف الخصائص التي تسلك سلوكًا مغايرًا عند الوصول إليها عن طريق نسخة الصنف وعن طريق الصنف. يبقى الوصول عن طريق نسخة الصنف كما هو، ولكن الوصول إلى الخاصية عن طريق الصنف سيوجَّه إلى تابع الصنف __getattr__، ويتم ذلك عن طريق إطلاق الخطأ AttributeError.

تسمح هذه الطريقة بجعل الخصائص فعالة في نسخة من الصنف، والحصول على خصائص ظاهرية في الصنف تحمل الاسم نفسه (راجع Enum للاطلاع على مثال بهذا الخصوص).

ملاحظة: هذه الدالة جديدة في الإصدار 3.4 من بايثون.

دوال coroutine مساعدة

الدالة types.coroutine()

تحوّل هذه الدالة دالة مولّدة إلى دالة coroutine تعيد coroutine مستندًا على مولّد. 

مصادر