Ray*_*Ray 5 python pickle boost-python
是否可以使用Boost.Python来暴露(使用cPickle)枚举的枚举?我已经使用这里描述的第一种方法成功地腌制了其他对象,但是这些方法似乎都没有适用于枚举类型,并且默认情况下这些对象似乎不是可拾取的.
不像他们在模块中那样.我理解这是可行的,但enum_语句的工作方式可以防止这种情况发生.
你可以在python方面解决这个问题.某处(可能在__init__.py文件中)执行以下操作:
import yourmodule
def isEnumType(o):
return isinstance(o, type) and issubclass(o,int) and not (o is int)
def _tuple2enum(enum, value):
enum = getattr(yourmodule, enum)
e = enum.values.get(value,None)
if e is None:
e = enum(value)
return e
def _registerEnumPicklers():
from copy_reg import constructor, pickle
def reduce_enum(e):
enum = type(e).__name__.split('.')[-1]
return ( _tuple2enum, ( enum, int(e) ) )
constructor( _tuple2enum)
for e in [ e for e in vars(yourmodule).itervalues() if isEnumType(e) ]:
pickle(e, reduce_enum)
_registerEnumPicklers()
Run Code Online (Sandbox Code Playgroud)
这将使一切泡菜都很好.
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |