Boost.Python ile karşılaşılmış bir enum'u (cPickle kullanarak) hazırlama mümkün mü? here açıklanan ilk yöntemi kullanarak başka nesneleri başarıyla seçtim, ancak hiçbiri enum türü için geçerli değil gibi görünüyor ve nesneler varsayılan olarak seçilebilir gibi görünmüyor.Boost.Python tarafından açığa çıkarılmış bir enum alınıyor Python
cevap
Modülde oldukları gibi değil. Bunun mümkün olduğunu İYİLEŞTİRDİĞİNİ anlıyorum, ama enum_ ifadesinin çalışma şekli bunu engelliyor.
Python tarafında bu konuda çalışabilirsiniz.
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()
Bu her şeyin turşu gayet yapacaktır: Somewhere (muhtemelen bir __init__.py dosyasında) böyle bir şey yapmak.
Bu sorunu python 2.7.3 için bir sınıf kapsamı içinde tanımlanan enumlarla karşılaştım. Manuel olarak ekledim: pickle (my_module.my_class.my_enum, reduce_enum) ve çalıştı. Enum türlerinin otomatik algılanmasını kaldırdım - en üst düzey enumların arındırılması düzeltilmiş gibi görünüyor. –
Bunu bilmek güzel. Teşekkürler. Birkaç yıldır BP ile çalışmıyorum, bu yüzden en sonda değilim. –
- 1. Boost.Python gerçekten çalışıyor bir şekilde Python için bir C++ özel durum açığa çıkarmak amacıyla (istisna işleme için) mevcut PyObject
- 2. Boost.Python ile bir Python metaclassı nasıl tanımlanır?
- 3. Paylaşımlı_ptr'yi boost.python
- 4. Python listesini Boost.python kullanarak C++ vektörüne geçirme
- 5. hata alınıyor Python
- 6. çıkarılmış iki fonksiyonun fzero
- 7. Boost.Python: bir işaretçi olan sınıf üyesini gösterme
- 8. dönüştürme enum bir enum Uyruk sahip piton
- 9. Enum tarafından Bahar MVC'de seçin
- 10. Bir .NET Hizmetinin Açığa Çıkması
- 11. Python: Belirli bir liste öğeleri alınıyor
- 12. Python enum - Ben enum şu var
- 13. Boost.Python: Bir sınıfın dışındaki bir kurucunun tanımlanması
- 14. Boost.Python: "TypeError: Öznitelik adının dize olması gerekir"
- 15. alın Enum Özel Özellik (Genel) tarafından
- 16. python 3.4: random.choice üzerindeki Enum
- 17. Çıkarılmış iş parçacığı yığınını asla serbest bırakma
- 18. alınıyor bir NumberFormatException
- 19. alınıyor bir hata
- 20. bir Enum
- 21. Bir ENUM
- 22. Python için externed enum "public" yazınız mı?
- 23. Python 2.7.1'i Apple tarafından sağlanan Python
- 24. Ben C++ ile yazılmış piton-modüllerini yapmak için boost.python kullanıyorum
- 25. Enum of Enum NULL
- 26. En İyi Uygulamalar Bower bileşenlerini açığa çıkarma
- 27. Python'da HTTP GET değişkenleri alınıyor
- 28. Python 'Bağlantı eş tarafından sıfırlandı'
- 29. Python Process, urllib2 tarafından engellendi
- 30. Belirli bir UTType'ın uzantıları alınıyor
+1 Bunu nasıl yapacağımı bilemiyorum ama çok isterim! (Şu anda en önce tamsayılara alınması gereken enumları dönüştürüyorum) – James