kloffy
kloffy

Reputation: 2928

Resolving enum34 metaclass conflict?

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

Answers (2)

CrazyCoder
CrazyCoder

Reputation: 780

Instead of enum.Enum. you should write only Enum. That problem will solved.

For ex:

        class MyEnumClass(Enum):
               ........

Upvotes: 1

warvariuc
warvariuc

Reputation: 59664

You should derive MyMeta from enum.Enum's metaclass:

class MyMeta(type(enum.Enum)):
    ...

Upvotes: 1

Related Questions