腌制(使用cPickle)已经暴露与Boost.Python的枚举可能吗?我已经用here描述的第一种方法成功地腌制了其他对象,但似乎没有一个适用于枚举类型,并且对象默认情况下似乎不可用。腌制Boost.Python公开的枚举
5
A
回答
6
不像它们在模块中那样。我被告知理解这是可能的,但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()
这会让一切咸菜就好了。
+1
我刚刚遇到了这个问题,在类范围内定义的枚举,为python 2.7.3。我手动添加:pickle(my_module.my_class.my_enum,reduce_enum),它工作。我删除了枚举类型的自动检测 - 顶层枚举的酸洗似乎已被修复。 – 2014-09-05 21:12:51
+0
很高兴知道。谢谢。我已经有好几年没有和英国石油一起工作过,所以我没有最新的。 – 2014-09-07 01:33:42
相关问题
- 1. 制作枚举公开
- 2. 用Spring Data REST公开枚举枚举
- 3. 公开包装COM组件的枚举
- 4. 当有多个Boost.Python模块时腌制暴露的类
- 5. 的Java公共枚举法的目的
- 6. 如何通过我的asmx公开第三方的枚举?
- 7. 如何评论一个公开可见的类型枚举?
- 8. 如何通过Kotlin使用Postgresql枚举类型公开的ORM?
- 9. 如何将C++中的枚举从C++公开到QML?
- 10. 带枚举的MySQL枚举
- 11. IBM的Rhapsody枚举限制
- 12. 是否有可能限制在C#中的公共枚举值?
- 13. 使用公共枚举来控制Swift 3中的TimeZone
- 14. 根据枚举的枚举限制使用ICriteria的NHibernate查询
- 15. Java如何开启枚举?
- 16. 在JNI中打开枚举?
- 17. 在命名空间级别枚举 - 仍然需要公开?
- 18. 只有串公共枚举值
- 19. Java枚举找到枚举
- 20. Java类枚举枚举类
- 21. 在枚举中枚举
- 22. 转换枚举来枚举
- 23. 重新枚举枚举
- 24. 枚举“复制”问题
- 25. 与protobuf的枚举替换C++枚举
- 26. Java的枚举和PostgreSQL枚举
- 27. Node.js native枚举中的枚举类型
- 28. 是枚举Java中的枚举
- 29. Java在枚举中的枚举
- 30. Java:旧枚举子集的新枚举
+1我不知道如何做到这一点,但非常想! (目前我转换的枚举必须先腌到整数) – James 2010-07-31 13:29:25