الوحدة copyreg‎ في بايثون

من موسوعة حسوب
< Python
مراجعة 17:39، 15 سبتمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الوحدة <code>copyreg‎</code> في بايثون}}</noinclude> تقدّم وحدة copyreg طريقة لتعريف دوال تستخدم...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث


تقدّم وحدة copyreg طريقة لتعريف دوال تستخدم أثناء سلسلة كائنات معيّنة في بايثون. تستخدم وحدتا pickle و copy هذه الدوال عند سلسلة أو نسخ تلك الكائنات. تقدّم الوحدة كذلك معلومات إعدادات حول الدوال البانية للكائنات التي ليست أصنافًا. يمكن لهذه الدوال البانية أن تكون دوال منشئة للكائنات factory functions أو نسخًا للأصناف.

الدالة ‎copyreg.constructor(object)‎

تصرّح هذه الدالة عن كون الكائن المعطى دالة بانية صحيحة. إن كان الكائن المعطى غير قابل للاستدعاء (وهكذا يكون غير صالح لأن يصبح دالة بانية) فإنّ الدالة تطلق الاستثناء TypeError.

الدالة copyreg.pickle(type, function, constructor=None)‎

تصرّح الدالة عن وجوب استخدام الدالة المعطاة كدالة اختزال reduction function للكائنات من النوع المعطى. يجب أن تعيد الدالة المعطاة سلسلة نصية أو صفًّا يتضمّن عنصرين أو ثلاثة.

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

راجع وحدة pickle للاطلاع على المزيد من التفاصيل حول الواجهة البرمجية المتوقّعة من الدالة المعطاة والدالة البانية المعطاة. يجدر التنبيه إلى إمكانية استخدام خاصية جدول الإرسال dispatch_table في الكائن المُسَلسِل أو في الصنف المتفرّع من الصنف pickle.Pickler للتصريح عن دوال الاختزال.

مثال

يعرض المثال التالي طريقة تسجيل دالة سلسلة وكيفية استخدامها:

>>> import copyreg, copy, pickle
>>> class C(object):
...     def __init__(self, a):
...         self.a = a
...
>>> def pickle_c(c):
...     print("pickling a C instance...")
...     return C, (c.a,)
...
>>> copyreg.pickle(C, pickle_c)
>>> c = C(1)
>>> d = copy.copy(c)  
pickling a C instance...
>>> p = pickle.dumps(c)  
pickling a C instance...

انظر أيضًا

  • الوحدة pickle في بايثون.
  • الوحدة marshal في بايثون.
  • الوحدة shelve في بايثون.

مصادر

صفحة Efficient arrays of numeric values في توثيق بايثون الرسمي.