enum枚举

Posted aieike

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了enum枚举相关的知识,希望对你有一定的参考价值。

1. EnumMeta

一旦Enum被定义,Enum类就是最终的;它不能与其他类型( int、float等)混合。如果它有继承的__new__除非定义了新__new__否则结果类将失败。
    @staticmethod
    def _get_mixins_(bases):
        """
        返回用于创建枚举成员的类型,以及第一个继承的类型枚举类。
        bases: the tuple of bases that was given to __new__  
        """
        if not bases:
            return object, Enum

        # double check that we are not subclassing a class with existing
        # enumeration members; while we're at it, see if any other data
        # type has been mixed in so we can use the correct __new__
        member_type = first_enum = None
        for base in bases:
            if  (base is not Enum and
                    issubclass(base, Enum) and
                    base._member_names_):
                raise TypeError("Cannot extend enumerations")
        # base is now the last base in bases
        if not issubclass(base, Enum):
            raise TypeError("new enumerations must be created as "
                    "`ClassName([mixin_type,] enum_type)`")

        # get correct mix-in type (either mix-in type of Enum subclass, or
        # first base if last base is Enum)
        if not issubclass(bases[0], Enum):
            member_type = bases[0]     # first data type
            first_enum = bases[-1]  # enum type
        else:
            for base in bases[0].__mro__:
                # most common: (IntEnum, int, Enum, object)
                # possible:    (<Enum 'AutoIntEnum'>, <Enum 'IntEnum'>,
                #               <class 'int'>, <Enum 'Enum'>,
                #               <class 'object'>)
                if issubclass(base, Enum):
                    if first_enum is None:
                        first_enum = base
                else:
                    if member_type is None:
                        member_type = base

        return member_type, first_enum
def __new__(metacls, cls, bases, classdict):
        member_type, first_enum = metacls._get_mixins_(bases)

以上是关于enum枚举的主要内容,如果未能解决你的问题,请参考以下文章

使用代码段遍历,枚举类型Enum

Java 枚举类的基本使用

C#如何将枚举类(enum)型转换成字符(string)类型

java枚举类型enum用法

[python] Python枚举模块enum总结

C#知识点 枚举