请教 copyreg.pickle 用法

seai 2018-11-13 04:14:15
一个项目需要在对象序列化/反序列化时,控制其中一个方法的行为,代码抽取出来,过程如下:

# -*- coding: utf-8 -*-

#python3.7不起作用
#python2.7有效

class Foo:
def run(self):
return None

def bark(self):
print('barking')

def __pickle(*args):
print(88888)#不起作用,88888没有执行
print(args)
return object, ()
copyreg.pickle(types.FunctionType, __pickle) #不起作用,88888没有执行

print(type(Foo.run)==types.FunctionType)
print(pickle.dumps(Foo.run))

print("OK")


怎样才能确保在Foo.run序列化的时候执行pickle的hook方法?
...全文
147 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘封记忆 2018-11-17
  • 打赏
  • 举报
回复
https://docs.python.org/3/library/copyreg.html 看里面的例子,应该是要先实例化 Foo 然后再执行 pickle.dumps, 如: pFoo = Foo() print( pickle.dumps(pFoo) )

>>> 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)  # doctest: +SKIP
pickling a C instance...
>>> p = pickle.dumps(c)  # doctest: +SKIP
pickling a C instance...
你可以看下说明。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧