copyreg --- 注意 pickle 支持函數(shù)?
源代碼: Lib/copyreg.py
copyreg 模塊提供了可在封存特定對象時使用的一種定義函數(shù)方式。 pickle 和 copy 模塊會在封存/拷貝特定對象時使用這些函數(shù)。 此模塊提供了非類對象構(gòu)造器的相關(guān)配置信息。 這樣的構(gòu)造器可以是工廠函數(shù)或類實例。
-
copyreg.constructor(object)? 將 object 聲明為一個有效的構(gòu)造器。 如果 object 是不可調(diào)用的(因而不是一個有效的構(gòu)造器)則會引發(fā)
TypeError。
-
copyreg.pickle(type, function, constructor=None)? 聲明該 function 應(yīng)當被用作 type 類型對象的“歸約函數(shù)”。 function 應(yīng)當返回字符串或包含兩到三個元素的元組。
如果提供了可選的 constructor 形參,它應(yīng)當是一個可用來重建相應(yīng)對象的可調(diào)用對象,在調(diào)用該對象時應(yīng)傳入由 function 所返回的參數(shù)元組。 如果 object 是一個類或 constructor 是不可調(diào)用的則將引發(fā)
TypeError。請查看
pickle模塊了解 function 和 constructor 所要求的接口的詳情。 請注意一個 pickler 對象或pickle.Pickler的子類的dispatch_table屬性也可以被用來聲明歸約函數(shù)。
示例?
以下示例將會顯示如何注冊一個封存函數(shù),以及如何來使用它:
>>> 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...
