醃製(使用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. 如何在Python中醃製複雜的枚舉值
- 5. Boost.Python:如何公開std :: unique_ptr
- 6. 當有多個Boost.Python模塊時醃製暴露的類
- 7. 使用Boost.Python向Python公開boost :: gregorian :: date
- 8. Java中的枚舉開關
- 9. 的Java公共枚舉法的目的
- 10. 如何通過我的asmx公開第三方的枚舉?
- 11. XSD:枚舉複製
- 12. 如何評論一個公開可見的類型枚舉?
- 13. 如何通過Kotlin使用Postgresql枚舉類型公開的ORM?
- 14. 如何將C++中的枚舉從C++公開到QML?
- 15. 枚舉的枚舉[JAVA]
- 16. 帶枚舉的MySQL枚舉
- 17. 類名單中的公共枚舉
- 18. IBM的Rhapsody枚舉限制
- 19. 使用公共枚舉來控制Swift 3中的TimeZone
- 20. 是否有可能限制在C#中的公共枚舉值?
- 21. 枚舉自制軟件和Macports的公式
- 22. 根據枚舉的枚舉限制使用ICriteria的NHibernate查詢
- 23. c + +開關枚舉錯誤
- 24. 枚舉鏈開始找
- 25. 在JNI中打開枚舉?
- 26. Java如何開啓枚舉?
- 27. 在命名空間級別枚舉 - 仍然需要公開?
- 28. Ruby:組合枚舉器,製作一個新的枚舉器
- 29. 只有串公共枚舉值
- 30. 公共虛擬枚舉(字典)如何?
+1我不知道如何做到這一點,但非常想! (目前我轉換的枚舉必須先醃到整數) – James 2010-07-31 13:29:25