copyreg --- ثبت توابع پشتیبانی pickle

کد منبع: Lib/copyreg.py


ماژول copyreg روشی برای تعریف توابعی ارائه می‌کند که هنگام پیکل کردن اشیاء خاص استفاده می‌شوند. ماژول‌های pickle و copy هنگام پیکل کردن/کپی کردن آن اشیاء از این توابع استفاده می‌کنند. این ماژول اطلاعات پیکربندی درباره‌ی سازنده‌های شیء که کلاس نیستند را فراهم می‌کند. چنین سازنده‌هایی ممکن است توابع کارخانه‌ای یا نمونه‌های کلاس باشند.

copyreg.constructor(object)

object را به‌عنوان یک سازنده معتبر اعلام می‌کند. اگر object قابل فراخوانی نباشد (و در نتیجه به‌عنوان یک سازنده معتبر نباشد)، TypeError را پرتاب می‌کند.

copyreg.pickle(type, function, constructor_ob=None)

اعلام می‌کند که function باید به‌عنوان تابع «کاهش» (reduction) برای اشیایی از نوع type استفاده شود. function باید یا یک رشته برگرداند یا یک تاپل شامل دو تا شش المان. برای جزئیات بیشتر در مورد رابط function، dispatch_table را ببینید.

پارامتر constructor_ob یک قابلیت قدیمی است و اکنون نادیده گرفته می‌شود، اما اگر ارسال شود باید فراخوانی‌پذیر باشد.

توجه داشته باشید که می‌توان از ویژگی dispatch_table یک شیء پیکل‌ساز (pickler) یا زیرکلاسی از pickle.Pickler نیز برای اعلام توابع کاهش استفاده کرد.

مثال

مثال زیر نشان می‌دهد که چگونه می‌توان یک تابع pickle را ثبت کرد و چگونه از آن استفاده خواهد شد:

>>> import copyreg, copy, pickle
>>> class C:
...     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...