'Return the enum member matching `name`
We use __getattr__ instead of descriptors or inserting into the enum
class\' __dict__ in order to support `name` and `value` being both
properties for enum members (which live in the class\' __dict__) and
enum members themselves.'

def __getattr__(cls, name):

    if _is_dunder(name):
        raise AttributeError(name)
    try:
        return cls._member_map_[name]
    except KeyError:
        raise AttributeError(name)
