Problems with subclassing enum34

Thomas Heller theller at ctypes.org
Fri Jun 28 06:48:38 EDT 2013


trying out the enum34 module.

What I want to create is a subclass of enum.Enum that is also
based on ctypes.c_int so that I can better use enum instances
in ctypes api calls.

When I do this, I get a metaclass conflict:


 >>> class MyEnum(ctypes.c_int, enum.Enum):
...    FOOBAR = 0
...
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
     metaclass conflict: the metaclass of a derived class must be a 
(non-strict) subclass of the metaclasses of all its bases
 >>>



When I do this, it does not work either:

 >>> class MyEnum_meta(type(ctypes.c_int), type(enum.Enum)):
...     pass
...
 >>> class MyEnum(ctypes.c_int, enum.Enum):
...     FOOBAR = 42
...     __metaclass__ = MyEnum_meta
...
 >>> MyEnum.FOOBAR
42
 >>>

It should have printed '<MyEnum.FOOBAR: 42>'.

Any ideas?

Thanks,
Thomas



More information about the Python-list mailing list