Reputation: 2928
Is there any way to get a custom metaclass to play nice with the enum34 package (pre Python 3)?
import enum
import six
class MyMeta(type):
def __new__(cls, class_name, bases, class_dict):
print("Does something useful.")
return super(MyMeta, cls).__new__(cls, class_name, bases, class_dict)
@six.add_metaclass(MyMeta)
class MyClass(object):
def __init__(self, *args, **kwargs):
pass
MyEnum = enum.Enum('MyEnum', [('One', 1), ('Two', 2), ('Three', 3)], type=MyClass)
The above currently raises an error in enum34 at enum_class = super(EnumMeta, metacls).__new__(metacls, cls, bases, classdict)
:
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
Upvotes: 3
Views: 723
Reputation: 780
Instead of enum.Enum. you should write only Enum. That problem will solved.
For ex:
class MyEnumClass(Enum):
........
Upvotes: 1
Reputation: 59664
You should derive MyMeta
from enum.Enum
's metaclass:
class MyMeta(type(enum.Enum)):
...
Upvotes: 1